Android: ¿Cuál es la diferencia entre setFlags y addFlags para la intención?

Respuestas:

133

Cuando lo usa setFlags, está reemplazando las banderas antiguas ... cuando lo usa addFlags, está agregando nuevas banderas. Recuerde, una bandera es solo un número entero que es potencia de dos ... en binario, las banderas se ven así: 1, 10, 100, 1000, etc ... (que en este caso son 1, 2, 4, 8) . Entonces, lo que addFlagshace es agregar el número entero que pasa usando el |operador.

// example... 
// value of flags: 1
intent.setFlags(2|4); 
// now flags have this value: 110
intent.addFlags(8); 
// now flags have this value: 1110
Cristian
fuente
¿Cómo se puede intent.setFlags(2|4);dar valor 110?
Gopal Singh Sirvi
6
@GopalSinghSirvi en binario, el LSB (bit menos significativo) para valores legibles por humanos es el más correcto. eso significa que el 0 de 110 representa el valor 2 ^ 0 = 1. El segundo valor 1 representa 2 ^ 1 = 2. Y el tercer valor representa 2 ^ 2 = 4. Entonces, usando el OR | operador en 4 (100) y 2 (010) es 110
Patric
Esto no debe confundirse con Window.setFlags / addFlags, que tienen un comportamiento diferente al de los métodos Intent.
TheIT
¿Puedo conocer los usos de estas banderas de intención? ¿O puede etiquetarme a la pregunta apropiada?
Anish Kumar
11
intent.setFlags(int num);

Este indicador de conjunto controla cómo manejar el Intent.setflag depende principalmente del tipo de componente que está ejecutando el Intent. Devuelve el mismo objeto de intent para encadenar múltiples llamadas en una sola declaración.

intent.addFlags(int num);

Esto ayuda a agregar indicadores adicionales a una intención particular con los valores existentes. Esto también devuelve el mismo objeto de intención para encadenar múltiples llamadas en una sola declaración.

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

Acabo de encontrar esto en el código fuente, como referencia.

Haldir65
fuente