[英]Broadcast receiver working even after app is killed by user
我有一个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>
网络变更接收器做的事情如下:
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);
}
}
}
问题是,当我手动终止我的应用程序并关闭网络(飞行模式)时,会启动对话活动。 这怎么可能? 我的广播接收器在后台还活着吗?
题:
一旦应用程序被杀,我有办法取消注册我的广播接收器吗? 也许在应用程序的单例类Android?
如果在Application类中不可能,我是否必须在onStop()
手动取消注册它? 并在每个活动的onStart()
中注册它?
您希望在每个活动上注册和取消注册BroadcastReceiver
。我认为应用程序类是最好的解决方案Application
类中有一个名为registerActivityLifecycleCallbacks ()的函数,您可以实时查看您的活动生命周期回调。
这怎么可能?
您在清单中注册了广播。 如果发送了匹配的广播,您的应用将会响应。 如果需要,如果您的应用当时没有运行,Android将为您分配一个流程。
(至少在Android O发布之前,但这是另一个时间的故事)
一旦应用程序被杀,我有办法取消注册我的广播接收器吗?
您需要决定接收此广播的时间段:
如果某个特定活动位于前台,请使用registerReceiver()
而不是清单,在活动的onStart()
方法中注册广播并在onStop()
取消注册
如果某个特定服务正在运行,请在服务的onCreate()
使用registerReceiver()
,在onDestroy()
unregisterReceiver()
onDestroy()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.