应用在后台

时间:2016-10-18 21:48:17

标签: android broadcastreceiver

有很多类似的问题,但没有一个问题解决我的问题(请阅读整个问题)。

在我的应用程序中,我需要侦听ACCESSORY_DETTACHED意图操作,但它应该仅在应用程序运行时(在前台或后台)处理,而不是在应用程序未运行时处理。

我知道有两种选择。在Manifest中注册BroadcastReceiver(因为我不希望在我的应用程序未运行时调用onReceive)或者在Activity中注册它(但是我必须在某处取消注册以避免泄漏而且我不能在onStop中执行此操作,因为我需要它在后台工作,不建议使用onDestroy。

我发现我可以在Application类中注册接收器并且它可以工作,但是,我仍然无法在任何地方取消注册。这种方法会导致泄漏吗?我应该打扰吗?还有其他可能性吗?

1 个答案:

答案 0 :(得分:1)

  

这种方法会导致泄漏吗?

这取决于您对自定义Application子类和BroadcastReceiver的实现。

您不会通过registerReceiver() onCreate()方法调用Application来泄漏接收器。我们在不想要的情况下保留使用内存的“泄漏”一词,并且只要您的进程存活,您希望接收器正在工作。

然而,接收器可能会泄漏内存,具体取决于它所保留的内容(如果有的话),因为只要你的进程存在,它就会存在。自定义Application中的其他内容可能会泄露,具体取决于您在Application中执行的其他操作。

因此,您的方法本身不会是内存泄漏,但您需要仔细检查您的接收器和Application,以确保您不会在此过程中引入其他泄漏。