android - 在onDestroy中释放资源真的不对吗?

标签 android

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

In extreme cases, the system might simply kill your app process without calling the activity's final onDestroy() callback, so it's important you use onStop() to release resources that might leak memory.

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

最佳答案

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

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

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

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

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

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

关于android - 在onDestroy中释放资源真的不对吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14017704/

相关文章:

android - 如何从android beacon读取major, minor

android - 您已经授权您的应用程序

安卓:更新数据

java - 使 TextView 的按钮更改值

android - Android 中的 onPress/onRelease

android - 标题栏不显示在模拟器上但显示在 eclipse 中?

java - 如何从 Assets 文件夹创建文件对象?

android - 如何将 Genymotion 虚拟设备版本更新到 2.2.2

java - 在微调器中划分值 - Android

Android spinner.setAdapter 生成 Resources$NotFoundException