gpt4 book ai didi

android - BroadcastReceiver 不保存局部变量

转载 作者:太空宇宙 更新时间:2023-11-03 12:33:10 24 4
gpt4 key购买 nike

在我的应用程序中,我有一个看起来像这样的 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 在 list 中注册如下:

<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>

最佳答案

BroadcastReceivers 不会在广播之间保存。每次广播都将创建一个新的 BroadcastReceiver 实例,至少如果通过 list 自动注册的话。您可以通过使变量成为静态变量并在该类的所有实例之间共享它来解决这个问题。但是您不能在广播之间保存实例变量。

关于android - BroadcastReceiver 不保存局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27557656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com