1

在 Activity 中,我在 onCreate 中注册接收器并在 onDestroy 中取消注册它。如果每个 onCreate 在下一个 onCreate 之后都跟着 onDestroy,它应该可以正常工作。否则,如果 onCreate 被调用的次数超过 onDestroy,则接收器会被多次注册,并且应用程序行为异常。

所以我的问题是:

  1. 我可以在 onCreate 中注册接收器并在 onDestroy 中取消注册它吗?
  2. 在下一个 onCreate 之前,onCreate 是否总是跟着 onDestroy?
4

2 回答 2

2

不保证会调用 onDestroy:

http://developer.android.com/reference/android/app/Activity.html#onDestroy%28%29

"

受保护的无效 onDestroy ()

在 API 级别 1 中添加 在销毁活动之前执行任何最终清理。这可能是因为 Activity 正在完成(有人在其上调用了 finish(),或者因为系统正在临时销毁该 Activity 实例以节省空间。您可以使用 isFinishing() 方法区分这两种情况。

注意:不要指望这个方法被称为保存数据的地方!例如,如果一个活动正在内容提供者中编辑数据,那么这些编辑应该在 onPause() 或 onSaveInstanceState(Bundle) 中提交,而不是在这里。此方法通常用于释放资源,例如与活动关联的线程,以便在其应用程序的其余部分仍在运行时,被破坏的活动不会留下这些东西。在某些情况下,系统会简单地终止 Activity 的宿主进程,而不会在其中调用此方法(或任何其他方法),因此不应使用它来执行打算在进程消失后保留的事情。

派生类必须调用该方法的超类实现。如果他们不这样做,将引发异常。

"

你可能还想看看这个线程:

Activity OnDestroy 从未调用过?

于 2012-11-08T14:53:54.163 回答
1

onDestroy 在 Activity 被销毁时被调用。或者从后台堆栈中删除,当用户不想要它或没有可能的方法返回它时。当您的活动想要接收广播时,您可以按照自己的方式进行操作。如果您收到后没有出现对话框或出现通知或祝酒词,那也应该没问题,如果您想真正安全并且一次只接收一个活动,并且仅在活动可见时将这些移动到onResume 和 onPause。

当另一个活动被带到前面并重新注册时,您可能会如何取消注册?

于 2012-11-08T11:59:51.080 回答