[英]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.