当android破坏活动以节省内存但不杀死App时,是否始终调用onDestroy?

时间:2015-09-18 11:10:39

标签: android android-activity android-lifecycle

我想使用Application.ActivityLifecycleCallbacks来监控后端堆栈中有多少活动。我可以在onCreate / onDestroy中递增/递减计数器来处理这个吗?

3 个答案:

答案 0 :(得分:3)

onDestroy NOT 保证每次活动被销毁时都会被调用。

如果用户点击返回以销毁它,将调用onDestroy 如果用户从最近的应用程序菜单中滑动应用程序,则不会调用onDestroy 如果应用程序崩溃,则确定是否会被调用(根据我的经验,它不会被调用)。

答案 1 :(得分:1)

onDestroy()是在Activity实例被销毁并从内存中完全删除之前调用的最终方法。在极端情况下,Android可能会终止托管Activity的应用程序进程,这将导致不调用OnDestroy。显然,大多数活动都不会实现此方法,因为大多数清理和关闭都是在OnPause和OnStop方法中完成的。 有关更多详细信息,请访问Android开发人员门户。 (https://developer.android.com/reference/android/app/Activity.html" Android开发者")

答案 2 :(得分:1)

  

当android破坏活动以节省内存时,是否总是调用onDestroy?

<强>文档

在您的活动被销毁之前收到的最后一个电话。这可能是因为活动正在完成(有人在其上调用finish(),或者因为系统暂时销毁此活动实例以节省空间。您可以使用isFinishing()来区分这两种情况方法

  

我想使用Application.ActivityLifecycleCallbacks来监控方式   后堆中有很多活动。我可以增加/减少   onCreate / onDestroy中的计数器来处理这个?

最好使用onStart()onStop()方法进行计数,onCreate()不保证可见性。例如,如果某种方式阻止了onStart()的发生。