2

有人可以给我一个如何在课堂上正确注销LocalBroadcastManager接收者的例子吗?Activity

Android 开发者培训建议这样做:

 @Override
    public void onPause() {
    super.onPause();  // Always call the superclass method first

    // When I should to unregister LocalBroadcastManager Receiver before or after super.onPause()?
}

 @Override
    public void onDestroy() {

        // If the DownloadStateReceiver still exists, unregister it and set it to null
        if (mDownloadStateReceiver != null) {
            LocalBroadcastManager.getInstance(this).unregisterReceiver(mDownloadStateReceiver);
            mDownloadStateReceiver = null;
        }

        ...

        // Must always call the super method at the end.
        super.onDestroy();
    }

我看到了谷歌的例子,但我不明白什么时候应该在之前或之后取消注册LocalBroadcastManager接收器super.onPause();以及在之前或之后的方法onDestroysuper.onDestroy();

提前致谢!

更新:我在方法中 注册LocalBroadcastManager接收器onResume()

4

2 回答 2

2

正如官方文档所说(http://developer.android.com/reference/android/content/BroadcastReceiver.html):

如果在 Activity.onResume() 实现中注册接收器,则应在 Activity.onPause() 中取消注册。(暂停时您不会收到意图,这将减少不必要的系统开销)。不要在 Activity.onSaveInstanceState() 中取消注册,因为如果用户移回历史堆栈,则不会调用它。

此外,如果您的接收器在您的清单中静态声明,您不必担心注册/注销

于 2015-05-22T11:55:31.080 回答
0

这取决于您何时注册。基本上,如果您在 ie 中注册,onResume()那么您在onPause(). 如果您注册onCreate()然后取消注册onDestroy()。我建议使用onResume()/onPause(),除非你知道你需要其他方式,

并用于调用 super 的方法。在“创建”方法中,您首先onCreate调用 super 的方法。在像您这样的“破坏”方法中,将超级称为最后一件事。onDestroy

于 2013-04-07T09:31:10.253 回答