4

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

在极端情况下,系统可能会简单地杀死您的应用程序进程而不调用活动的最终 onDestroy() 回调,因此使用 onStop() 释放可能会泄漏内存的资源很重要。

听起来好像是错的。杀死进程怎么会泄漏内存?

4

1 回答 1

8

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

如果您将停止服务的代码放在 onDestroy() 中,则该代码可能永远不会被调用,这会使该服务继续运行,直到 Android 决定终止它(如果有的话,这可能暂时不会发生)。该正在运行的服务是在应用程序外部泄漏内存/资源的示例。

您应该将这样的清理代码放在保证被调用的方法中。

请注意,在调用 onPause() 之后进程是可终止的,因此 onPause() 确实是您绝对必须进行清理的地方。

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

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

于 2012-12-24T06:15:12.447 回答