Android: qual è la differenza tra setFlags e addFlags per intento


Risposte:


133

Quando usi setFlagsstai sostituendo i vecchi flag ... quando usi addFlagsstai aggiungendo nuovi flag. Ricorda, una bandiera è solo un numero intero che è potenza di due ... in binario, le bandiere hanno questo aspetto: 1, 10, 100, 1000, ecc ... (che in questo caso sono 1, 2, 4, 8) . Quindi, quello che addFlagsfa è aggiungere il numero intero che passi usando l' |operatore.

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

Come può intent.setFlags(2|4);dare un valore 110
Gopal Singh Sirvi

6
@GopalSinghSirvi in ​​binario l'LSB (bit meno significativo) per i valori leggibili dall'uomo è quello più corretto. ciò significa che lo 0 di 110 rappresenta il valore 2 ^ 0 = 1. Il secondo valore 1 rappresenta 2 ^ 1 = 2. E il terzo valore rappresenta 2 ^ 2 = 4. Quindi usando l'OR | operatore su 4 (100) e 2 (010) è 110
Patric

Questo non deve essere confuso con Window.setFlags / addFlags che hanno un comportamento diverso rispetto ai metodi Intent.
TheIT

Posso conoscere gli usi di queste bandiere di intenti? o puoi taggarmi alla domanda appropriata?
Anish Kumar

11
intent.setFlags(int num);

Questo flag set controlla come gestire l'Intent.setflag dipende principalmente dal tipo di componente eseguito dall'Intent e restituisce lo stesso oggetto intent per concatenare più chiamate in una singola istruzione.

intent.addFlags(int num);

Questo aiuta ad aggiungere ulteriori flag a un intento particolare con i valori esistenti. Questo restituisce anche lo stesso oggetto intento per concatenare più chiamate in una singola istruzione.


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

Ho appena trovato questo dal codice sorgente, come riferimento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.