Android: niyet için setFlags ve addFlags arasındaki fark nedir


Yanıtlar:


133

Kullandığınızda setFlagseski bayrakları değiştiriyorsunuz ... kullandığınızda addFlagsyeni bayraklar ekliyorsunuz. Unutmayın, bayrak sadece ikinin üssü olan bir tamsayıdır ... ikilide bayraklar şuna benzer: 1, 10, 100, 1000, vb ... (bu durumda 1, 2, 4, 8'dir) . Öyleyse, operatörü addFlagskullanarak geçirdiğiniz tam sayıyı eklemektir |.

// example... 
// value of flags: 1
intent.setFlags(2|4); 
// now flags have this value: 110
intent.addFlags(8); 
// now flags have this value: 1110

Nasıl mümkün olabilir intent.setFlags(2|4);110 değeri verecek
Gopal Singh Sirvi

6
@GopalSinghSirvi, insan tarafından okunabilir değerler için LSB (en az anlamlı bit) en doğru olanıdır. bu, 110'un 0'ının 2 ^ 0 = 1 değerini temsil ettiği anlamına gelir. İkinci değer 1, 2 ^ 1 = 2'yi temsil eder. Ve üçüncü değer 2 ^ 2 = 4'ü temsil eder. Öyleyse OR kullanarak | 4 (100) ve 2 (010) üzerindeki operatör 110
Patric

Bu, Intent yöntemlerinden farklı bir davranışa sahip olan Window.setFlags / addFlags ile karıştırılmamalıdır.
TheIT

Bu niyet bayraklarının kullanımlarını öğrenebilir miyim? veya beni uygun soruya etiketleyebilir misin?
Anish Kumar

11
intent.setFlags(int num);

Bu set bayrağı, Intent.setflag'ın nasıl işleneceğini kontrol eder, esas olarak Intent tarafından yürütülen bileşenin türüne bağlıdır. Birden çok çağrıyı tek bir ifadeye zincirlemek için aynı amaç nesnesini döndürür.

intent.addFlags(int num);

Bu, mevcut değerlerle belirli bir amaca ek işaretler eklemeye yardımcı olur. Bu ayrıca birden çok çağrıyı tek bir ifadeye zincirlemek için aynı amaç nesnesini döndürür.


6
 public Intent addFlags(int flags) {
    mFlags |= flags;
    return this;
}
public Intent setFlags(int flags) {
    mFlags = flags;
    return this;
}

Bunu referans için kaynak kodundan buldum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.