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