是否有可能在Android中调用onCreate而不是onDestroy?

时间:2012-11-08 11:53:11

标签: android broadcastreceiver

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

所以我的问题是:

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

2 个答案:

答案 0 :(得分:2)

不保证会调用onDestroy:

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

protected void onDestroy()

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

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

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

您可能还想查看此主题:

Activity OnDestroy never called?

答案 1 :(得分:1)

在销毁活动时调用

onDestroy。或者从后台堆栈中删除,当用户不想要它或没有可能的方法回到它。当你的活动想要接收一个很好的广播来做你自己的方式。如果没有出现对话框,或者收到通知或看到的东西也应该没问题,如果你想要真正安全,并且一次只接收一个活动,并且只有在活动可见时才将这些移动到onResume和onPause。

你可能会在另一个活动被带到前面并重新注册之后如何取消注册?