在onDestroy中释放资源真的错了吗?

时间:2012-12-24 06:10:45

标签: android

Android文档说明(在http://developer.android.com/training/basics/activity-lifecycle/stopping.html中):

  

在极端情况下,系统可能会在不调用活动的最终onDestroy()回调的情况下终止您的应用程序进程,因此使用onStop()释放可能会泄漏内存的资源非常重要。 / p>

听起来像是错的。如何杀死进程泄漏内存?

1 个答案:

答案 0 :(得分:8)

假设您在onStart()方法中启动了一项服务,并且当用户离开活动时您打算停止该服务。

如果你把代码放在onDestroy()中停止服务,那么代码可能永远不会被调用,这可能会使该服务继续运行,直到Android决定杀死它(这可能暂时不会发生,如果有的话)。正在运行的服务就是泄漏应用程序之外的内存/资源的例子。

你应该把这样的清理代码放在一个保证被调用的方法中。

请注意,在调用onPause()之后进程是可以运行的,因此onPause()实际上是你想要进行清理的地方,绝对必须发生。

(有关活动生命周期的详细信息,请参阅https://developer.android.com/guide/components/activities.html中的表1)

泄漏可能非常糟糕的另一件事:蓝牙发现或位置报告(基于GPS或基于网络)已开启但未尽快关闭 - 对电池寿命非常不利。