簡體   English   中英

廣播接收器即使在app被用戶殺死后仍然工作

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM