在我的应用程序中,我有一个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();
}
}
现在我的问题是,每次收到广播时,变量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>
答案 0 :(得分:6)
广播之间不保存BroadcastReceivers。每个广播都将创建BroadcastReceiver的新实例,至少如果通过清单自动注册。您可以通过使变量静态并在类的所有实例之间共享来解决此问题。但是你无法在广播之间保存实例变量。
答案 1 :(得分:0)
如果您使用动态BroadcastReceiver(通过Context.registerReceiver()
和Context.unregisterReceiver()
注册和取消注册),接收方可以保存其成员字段。
AndroidManifest.xml注册的BroadcastReceiver不能。因为它每次收到广播时都会创建一个新实例。