我有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()
的每项活动中注册?
答案 0 :(得分:3)
您希望在每项活动中注册和取消注册BroadcastReceiver
。
我认为application类是最好的解决方案。
Application
类中有一个名为registerActivityLifecycleCallbacks()的函数,
您可以实时观看您的活动生命周期回调。
答案 1 :(得分:2)
这怎么可能?
您在清单中注册了广播。如果发送了匹配的广播,您的应用将会响应。如果需要,如果您的应用当时没有运行,Android将为您分配一个流程。
(至少在Android O发布之前,但这是另一个故事)
一旦应用程序被杀,我有办法取消注册我的广播接收器吗?
您需要决定接收此广播的时间段:
如果某个特定活动位于前台,请使用registerReceiver()
代替清单,在活动的onStart()
方法中注册广播并取消注册{ {1}}
如果某个特定服务正在运行,请使用服务onStop()
中的registerReceiver()
和onCreate()
中的unregisterReceiver()