我有一个 BroadcastReceiver
检查网络连接静态声明为:
<receiver
android:name=".core.util.NetworkChangeReceiver"
android:label="NetworkChangeReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
Network change receiver 做类似的事情:
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
String status = NetworkUtil.getConnectivityStatusString(context);
if(status == "Not connected to Internet") {
Intent i = new Intent(context, Dialog.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
问题是,当我手动终止我的应用程序并关闭网络(飞行模式)时,对话 Activity 启动。这怎么可能?我的广播接收器还在后台运行吗?
问题:
应用程序被终止后,有没有办法让我注销我的广播接收器?也许在Android的应用程序单例类中?
如果在 Application 类中不可能,我是否必须在 onStop()
中的所有地方手动注销它?并在每个 Activity 的 onStart()
中注册它?
最佳答案
您希望在每个 Activity 上注册和注销BroadcastReceiver
。
我认为 application类是最好的解决方案。
Application
类中有一个名为 registerActivityLifecycleCallbacks 的函数(),
您可以实时观看您的 Activity 生命周期回调。
关于java - 广播接收器即使在应用程序被用户杀死后也能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43106086/