BroadcastReceiver不保存本地变量

Cil*_*nco 3 android broadcastreceiver

在我的应用程序中,我有一个BroadcastReceiver看起来像这样的东西:

public class MyBroadcastReceiver extends BroadcastReceiver
{
    public static final String CUSTOM_BROADCAST_1 = "com.cilenco.application1";
    public static final String CUSTOM_BROADCAST_2 = "com.cilenco.application2";

    private boolean lastState = false;

    @Override
    public void onReceive(Context context, Intent intent) 
    {
        final String action = intent.getAction();

        boolean cb1 = CUSTOM_BROADCAST_1.equals(action);
        boolean cb2 = CUSTOM_BROADCAST_2.equals(action);

        if(cb1) lastState = true;
        else if(cb2) lastState = false;

        Toast.makeText(context, "" + lastState, Toast.LENGTH_LONG).show();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,每次收到广播时,变量lastState都是假的.我确信该onReceive方法被正确调用.你有什么想法吗?对我来说,看起来BroadcastReceiver每次收到广播时都会重新初始化.这是正确的,如果是,我怎么能避免这个问题?我BroadcastReceiver在清单中注册如下:

<receiver 
    android:name="service.MyBroadcastReceiver"
    android:enabled="true"
    android:exported="false" >
    <intent-filter>
        <action android:name="com.cilenco.application1"/>
        <action android:name="com.cilenco.application2"/>
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

Gab*_*han 6

广播之间不保存BroadcastReceivers.每个广播都将创建BroadcastReceiver的新实例,至少如果通过清单自动注册.您可以通过使变量静态并在类的所有实例之间共享来解决此问题.但是你不能在广播之间保存实例变量.

  • 即使是静态也无济于事,因为很可能该过程将在广播之间终止.静态数据成员只是一个缓存.任何必须经历过程终止的东西都需要写入磁盘. (4认同)