我有一种感觉,我已经知道了这个问题的答案,但我不确定。我正在使用广播接收器拦截传入的 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/