Android 在下次应用加载时注销广播接收器

标签 android

我有一种感觉,我已经知道了这个问题的答案,但我不确定。我正在使用广播接收器拦截传入的 SMS 消息。

我使用 registerReceiver 函数以典型方式注册接收器,当您取消注册接收器时,您使用函数 unregisterReceiver 函数。我保留一个全局广播变量以根据需要加载和卸载接收器。

如果应用程序关闭,就像用户实际关闭应用程序一样,我没有在 onDestroy 方法中注销接收器,我知道这是不好的做法,是否有办法在下次加载应用程序时注销接收器?我可以创建该广播接收器的另一个实例,然后取消注册吗?

最佳答案

If the app closes

您可以说您的用户界面是否在前台。您可以说您的应用进程在前台、后台或已终止。

尚不清楚“关闭”等同于什么。

like the user actually closes the application

用户可以将应用的 UI 和进程移至后台(例如,按 HOME)。用户可以破坏应用程序的 UI 并将其进程移至后台(例如,从上次运行的 Activity 中按 BACK)。用户可以终止应用程序的后台进程(例如,将应用程序从最近任务列表中滑出)。用户可以强制停止应用(例如,在“设置”中按下应用的“强制停止”按钮)。

尚不清楚“用户实际关闭应用程序”等同于什么。

would there be a way to unregister the receiver the next time the app loads?

要么您有对您的 BroadcastReceiver 对象的引用,要么没有。如果这样做,请在某些 Context 上调用 unregisterReceiver(),并传入该 BroadcastReceiver 实例。如果您没有 BroadcastReceiver 实例,则无法注销接收器。如果您的进程在您注册接收者和现在之间终止,则该接收者不存在并且实际上未注册。

关于Android 在下次应用加载时注销广播接收器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26063301/

相关文章:

android - 如何以编程方式列出 SD 卡文件夹和文件文件夹和文件

Android 应用程序无法在设备上启动(并且不可见!)

android - Android Studio ArrayAdapter不起作用程序崩溃

java - 只有部分用户报告 "Resource Not Found"错误。这有意义吗?

android - 无法解析 ':app@release/compileClasspath' : Could not resolve com. firebase :firebase-client-android:2. 3.1 的依赖关系

java - 如何在 EditText 中设置 Min text (Mandatory) 和 Max text

java - 在这种情况下使用多个 else if 语句是不好的做法吗?

android - 如何在 Jetpack Compose 中分分钟重构?

javascript - 如何用约束布局交换两个按钮的位置?

android - 更新特定行的特定列的值。安卓SQLite