我知道不建议在 Android 应用程序中使用 system.exit(0),但我想知道在 onDestroy() 中使用它是否可以,因为此时允许应用程序被杀死?
我问的原因与这个问题有关。
我知道不建议在 Android 应用程序中使用 system.exit(0),但我想知道在 onDestroy() 中使用它是否可以,因为此时允许应用程序被杀死?
我问的原因与这个问题有关。
onDestroy
会被调用。在某些情况下,操作系统会在不调用您的onDestroy
.当然,这只是一个建议,因为它并不直接适用于您的场景。如果system.exit(0)
因为应用程序已经被杀死而没有被调用,我会说你没事。;-)
Activity.onDestroy
被调用,则意味着您的进程处于以下两种状态之一:--操作系统知道的应用程序中没有运行其他组件(Service
或 a )。ContentProvider
这意味着无论如何,您的进程很可能会立即被操作系统杀死,或者如果系统的其他部分/其他应用程序需要物理内存,则将是第一个被回收的进程。因此调用exit(0)
不会有太大的作用。
-- 系统知道在您的进程中运行的另一个组件。在这种情况下调用exit()
会终止进程,杀死您的其他组件并可能损坏您的数据。当然,操作系统可能不太关心,但您的用户可能不喜欢它。:-)
Dalvik 堆限制是 OEM 可配置的,尽管很少有 OEM 确实努力为他们的设备调整它,并且只使用操作系统默认值。我不记得具体的默认值,但可以肯定地假设每个应用程序允许在低端 Froyo/Gingerbread 上的 16MB 和高端 ICS/JB 手机上的 48MB 之间。哎呀,我会很乐观,将上限提高到 128MB(尽管我还没有听说过这样的设备)。:-)
ContentProvider
在你输入 a或 a的那一刻Service
,你不能再打电话exit()
了(正如我上面提到的),你将被迫正确地解决问题。你还不如硬着头皮现在就去做。最简单的方法是确保Bitmap.recycle()
在完成特定位图后调用。当然,只要您不必在内存中保留比您的内存更多的位图,它就可以工作,但无论如何,这完全是一个完全独立的野兽。:-)你不应该调用 sytem.exit(0),让 android 管理应用程序。如果我了解您有内存泄漏问题。我猜是因为位图。所以看看这个有效地显示位图http://developer.android.com/training/displaying-bitmaps/index.html
如果您在 onDestroy() 方法中调用 system.exit(0),您将无法在横向和纵向之间切换。
捷径解决方案:当您完成应用程序时,在活动上调用 finish() 而不是 System.exit(0)。
正确的方法是优化应用程序中的位图使用。看到这个
http://developer.android.com/training/displaying-bitmaps/index.html