2016-03-06 2 views
1

У меня есть 2 классов, которые я хочу, чтобы они взаимодействуют друг с другом:Android: могу ли я поставить глобальные переменные в BroadCastReceiver?

Первый является Receiver.java:

public class Receiver extends BroadcastReceiver{ 
    private int var = 0; 

    public void onReceive(Context context, Intent intent) { 
     //Bunch of codes here 
     method(); 
     //use var to do something} 

    private void method() { 
     //do something} 

    public void setVar(int i) { 
     var= i; } 
} 

Тогда у меня есть еще один класс, который я надеюсь использовать, чтобы изменить переменную в Receiver, MainActivity.java:

public class MainActivity extends AppCompatActivity { 

    private Receiver receiver; 

    protected void onCreate(Bundle savedInstanceState) { 
     receiver.setVar; 
     //Bunches of other codes 
} 

Receiver класс слушать SMS сообщение и ответить, он EXTE nds BroadcastReceiver.

MainActivity класс изменение установка Receiver класс.

Поскольку исходный код поместить все переменные внутри OnReceive():

  • Смогу ли я изменить переменную вар в Receiver классе, если я ставлю его вне метода ?

  • Can MainActivity доступ и переменная изменения в классе Receiver?

  • Способ () в пределах Receiver класс произведение?

ответ

2

Ответ ниже только для BroadcastReceiver, который должен быть создан и зарегистрирован/незарегистрированными программно из Activity, как OP спросил действительным.

Ответ не будет работать для BroadcastReceiver, который должен быть объявлен в AndroidManifest и инстанцирован системой, потому что один onReceive() возвращает приемник Считается, что не больше не является активным, и новый экземпляр будет создан в следующий раз.


Receiver является регулярным Java объекта, так

Смогу ли я изменить переменный вар в классе приемника, если я положил его вне onReceive()?

Да. var является членом класса Receiver класс.

Может ли доступная переменная MainActivity и изменять ее в классе Receiver?

Да.MainActivity имеет ссылку receiver на экземпляр класса Receiver.

Работает ли метод() в классе приемника?

Да. Вы сможете вызвать его после инициализации receiver.

+0

Книга, которую я прочитал: ** Приемники широковещательной передачи существуют только до тех пор, пока работает метод onReceive(). Из-за этого вам нужно написать весь свой код внутри onReceive(). Такие вещи, как переменные экземпляра, не имеют смысла, поскольку они будут выходить из области видимости каждый раз, когда выполняется onReceive(). ** означает ли это, что во время работы оно не рекомендуется выставлять за пределы onReceive()? – user2789240

+0

Okey. Заранее спасибо :) – user2789240

Смежные вопросы