Android 应用在后台 运行 时的广播接收器
Android Broadcast Receiver when app is running in background
有很多类似的问题,但是 none 解决了我的问题(请阅读整个问题)。
在我的应用程序中,我需要监听 ACCESSORY_DETTACHED 意图操作,但只有当应用程序是 运行(在前台或后台)而不是当应用程序不是 [=24] 时才应该处理它=].
我知道有两个选项。在 Manifest 中注册 BroadcastReceiver(不会工作,因为我不希望在我的应用程序不是 运行 时调用 onReceive)或在 Activity 中注册它(但我必须取消注册它在某个地方以避免泄漏,我不能在 onStop 中执行此操作,因为我也需要它在后台工作并且不推荐使用 onDestroy)。
我发现我可以在应用程序 class 中注册接收器并且它有效,但我仍然无法在任何地方注销它。这种方法会导致泄漏吗?我应该打扰吗?还有其他可能吗?
Does this approach lead to leaks?
这取决于您对自定义 Application
子类和 BroadcastReceiver
的实现。
您不会通过从 Application
的 onCreate()
方法调用 registerReceiver()
来泄露接收器。我们保留术语 "leak" 用于在我们不想使用内存时使用内存,并且您 希望 只要您的进程处于活动状态,接收器就可以工作。
但是,receiver 可能会泄漏内存,这取决于它持有的内容(如果有的话),因为只要您的进程存在,它就会存在。您自定义 Application
中的其他内容可能会泄露,具体取决于您在 Application
中所做的其他事情。
因此,您的方法本身不会造成内存泄漏,但您需要仔细检查您的接收器和 Application
以确保您不会在此过程中引入其他泄漏。
有很多类似的问题,但是 none 解决了我的问题(请阅读整个问题)。
在我的应用程序中,我需要监听 ACCESSORY_DETTACHED 意图操作,但只有当应用程序是 运行(在前台或后台)而不是当应用程序不是 [=24] 时才应该处理它=].
我知道有两个选项。在 Manifest 中注册 BroadcastReceiver(不会工作,因为我不希望在我的应用程序不是 运行 时调用 onReceive)或在 Activity 中注册它(但我必须取消注册它在某个地方以避免泄漏,我不能在 onStop 中执行此操作,因为我也需要它在后台工作并且不推荐使用 onDestroy)。
我发现我可以在应用程序 class 中注册接收器并且它有效,但我仍然无法在任何地方注销它。这种方法会导致泄漏吗?我应该打扰吗?还有其他可能吗?
Does this approach lead to leaks?
这取决于您对自定义 Application
子类和 BroadcastReceiver
的实现。
您不会通过从 Application
的 onCreate()
方法调用 registerReceiver()
来泄露接收器。我们保留术语 "leak" 用于在我们不想使用内存时使用内存,并且您 希望 只要您的进程处于活动状态,接收器就可以工作。
但是,receiver 可能会泄漏内存,这取决于它持有的内容(如果有的话),因为只要您的进程存在,它就会存在。您自定义 Application
中的其他内容可能会泄露,具体取决于您在 Application
中所做的其他事情。
因此,您的方法本身不会造成内存泄漏,但您需要仔细检查您的接收器和 Application
以确保您不会在此过程中引入其他泄漏。