Android 将 BroadcastReceiver 保持在后台

标签 android broadcastreceiver android-service background-process android-broadcast

我创建了一个 BroadcastReceiver,它仅在我的应用程序显示在最近的应用程序菜单中时运行。如果我从最近的应用程序中删除我的应用程序,BroadcastReceiver 将停止工作。 如何让 BroadcastReceiver 保持在后台?

我从我的主要 Activity (在 OnCreate() 中)注册了 BroadcastReceiver。

IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(receiver, intentFilter);

BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

    }   
};

最佳答案

这不是注册接收器的方式。你的接收器停止工作,因为你在 onCreate 中构建它,这意味着只要你的应用程序存在,它就会存在。当应用程序被销毁时,您也会失去接收器。

如果您在 Activity 中注册接收器,您应该始终在 onResume 中注册它并取消注册 onPause,这将使它在 Activity 对用户可见时可用。这是一个用例,当您希望在用户与 Activity 交互时拥有一个 Activity 的接收器。

如果你想要一个后台接收器,你需要在 AndroidManifest 中注册它(带有 intent 过滤器),添加一个 IntentService 并在你收到广播时启动它接收者。

这是一个tutorial ,您对第 3 章感兴趣。

如果您需要始终在线,请启动前台服务。服务中有一个功能可以让你:startForeground .然后在创建服务时注册您的接收器,并在它被销毁时注销。前台服务虽然很讨厌。

关于Android 将 BroadcastReceiver 保持在后台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22257310/

相关文章:

java - AlarmManager 在重新启动时重置

Android - 判断某个InputMethod(自定义键盘)的调用应用

android - Application 类是否保证在调用定义的引导接收器之前被实例化

android - 其他 LinearLayout 中缺少 Linearlayout

android - 如何获取拨出电话的状态

android - 更改图层列表项中的矢量可绘制颜色

android - 如何在android中后台运行应用程序?

java - 如何验证来自不同应用程序的广播接收器的 onReceive 方法是否确实被调用?

android - 如何使用 Mapbox Android SDK v10-beta20 向图 block 提供商提供身份验证 token ?

java - 如何通过 java 而不是 Firebase 控制台发送 Firebase 推送通知?