java - 广播接收器即使在应用程序被用户杀死后也能正常工作

标签 java android android-studio service broadcastreceiver

我有一个 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/

相关文章:

java - 哈希集中的正则表达式搜索

android-studio - ANDROID_SDK_ROOT=undefined(推荐设置),同时使用 Cordova for Android 设备构建 ionic 应用程序

java - Java Thread trail 中 "new"周围的括号?

java - Java 和 JSP 真的有那么大的不同吗?

android - 适用于 Android 的 Unity native C++ 插件

Android - 动画后如何与 View 交互?

android - 从build.gradle读取元数据

java - 无法下载aapt2-windows.jar(com.android.tools.build :aapt2:3.4.2-5326820): No cached version available for offline mode

java - Cassandra 4.0 使用 java 驱动程序进行多选

android - fitSystemWindows 以编程方式实现状态栏透明度