Android: qual é a diferença entre setFlags e addFlags para intent

Respostas:

133

Quando você usa, setFlagsvocê está substituindo as sinalizações antigas ... quando você usa, addFlagsvocê está adicionando novas sinalizações. Lembre-se, um sinalizador é apenas um número inteiro que é a potência de dois ... em binário, os sinalizadores são assim: 1, 10, 100, 1000, etc ... (que neste caso são 1, 2, 4, 8) . Então, o que addFlagsfaz é anexar o inteiro que você passa usando o |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
fonte
Como é possível intent.setFlags(2|4);dar valor 110
Gopal Singh Sirvi
6
@GopalSinghSirvi em binário, o LSB (bit menos significativo) para valores legíveis por humanos é o mais correto. isso significa que 0 de 110 representa o valor 2 ^ 0 = 1. O segundo valor 1 representa 2 ^ 1 = 2. E o terceiro valor representa 2 ^ 2 = 4. Portanto, usando o OR | operador em 4 (100) e 2 (010) é 110
Patric
Isso não deve ser confundido com Window.setFlags / addFlags, que tem um comportamento diferente dos métodos Intent.
TheIT de
Posso saber os usos desses sinalizadores de intenção? ou você pode me marcar com a pergunta apropriada?
Anish Kumar
11
intent.setFlags(int num);

Este sinalizador de conjunto controla como lidar com o Intent.setflag depende principalmente do tipo de componente que está sendo executado pelo Intent. Ele retorna o mesmo objeto de intent para encadear várias chamadas em uma única instrução.

intent.addFlags(int num);

Isso ajuda a adicionar sinalizadores adicionais a um intent específico com os valores existentes. Isso também retorna o mesmo objeto de intent para encadear várias chamadas em uma única instrução.

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

Acabei de encontrar isso no código-fonte, para referência.

Haldir65
fonte