即使活动不可见,注册和取消注册监听器以接收回调的正确方法是什么?

时间:2014-03-26 13:41:30

标签: android memory-leaks android-lifecycle

我有一个服务助手singelton,它基本上将一个Activity连接到一个Service(发送请求并接收广播并为Activity提供一个回调接口来实现)

推荐的方式可能是在onResume()/ onPause()这样做:

MyActivity extends Activity implements ServiceHelper.Callbacks {

   protected void onResume() {
       super.onResume();
       mServiceHelper.setListener(this);
   }

   protected void onPause() {
       super.onPause();
       // Avoid leaking this Activity
       mServiceHelper.setListener(null);
   }

}

这可以防止泄漏,但是在暂停/不可见的情况下,Activity可能会错过一些重要的回调。 理想情况下我会在onCreate()和onDestroy()中执行此操作,但its stated表示在onPause()之后Activity可以被禁用,因此Activity可能会被泄露(如果我正确解释)

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

onCreate / onDestroy对是正确的。如果应用程序被系统杀死,则释放所有内存,因此在这种情况下不可能发生泄漏。

答案 1 :(得分:0)

如果您想在应用处于活动状态或暂停状态时执行某些操作,请考虑使用广播接收器。 http://developer.android.com/reference/android/content/BroadcastReceiver.html