Android: 我可以将全局变量放在 BroadCastReceiver 中吗?

Android: can I put Global Variables in BroadCastReceiver?

我有 2 个class我希望它们相互交互:

首先是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; }
}

然后我有另一个class希望用来改变Receiver中的变量,MainActivity.java:

public class MainActivity extends AppCompatActivity {

    private Receiver receiver;

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

Receiver class 监听短信并响应,它扩展了 BroadcastReceiver.

MainActivity class 更改 Receiver class 中的设置。

由于原始代码将所有变量放在 onReceive():

下面的答案是 对要实例化的 BroadcastReceiver 有效,registered/unregistered 在 [=11] 中以编程方式=] 如 OP 所问.

对于要在 AndroidManifest 中声明并由系统实例化的 BroadcastReceiver,答案 将不起作用 ,因为一旦onReceive() returns receiver被认为不再活跃,下次将创建一个新实例。


Receiver 是一个普通的 Java 对象,所以

Will I be able to change variable var in the Receiver class if I put it outside of onReceive()?

是的。 varReceiver class 的 class 成员。

Can MainActivity access and change variable in the Receiver class?

是的。 MainActivity 具有对 Receiver class 实例的 receiver 引用。

Does the method() within Receiver class work?

是的。您可以在 receiver 初始化后调用它。