2012-12-30 24 views

回答

4
  • 不要依靠的是onDestroy將被調用。有些情況下操作系統會在不致電onDestroy的情況下殺死您的應用程序。

只是一個建議的話,當然,因爲它不直接適用於您的方案。如果system.exit(0)沒有被調用,因爲該應用程序已經被殺死,我會說你沒事。 ;-)

  • 如果您Activity.onDestroy被調用,這意味着你的過程是兩種狀態之一:

- 有一個在應用程序運行沒有任何其他成分(ServiceContentProvider)的操作系統知道。這意味着您的進程很可能會立即被操作系統殺死,或者如果系統/其他應用程序的其他部分需要物理內存,則會成爲第一個被回收的進程。因此呼籲exit(0)將實現不多。

- 有你的過程中,該系統是知道運行的另一個組成部分。在這種情況下調用exit()會終止該進程,從而導致您的其他組件無法使用,並可能破壞您的數據。當然,操作系統可能不太在意,但用戶可能不會感激它。 :-)

  • 殺死你自願的過程將不利於其他應用程序,如果他們已經用盡了其內部的Dalvik堆限制。無論設備具有多少物理內存,操作系統都有限制Dalvik允許在任何堆分配過程中使用多少內存。因此,系統有可能有一半的內存空間,並且特定的應用程序仍然會打到OOM。

Dalvik堆的限制是OEM可配置的,但很少有OEM實際上會盡力調整它的設備,並且只能使用OS默認設置。我不記得具體的默認值,但可以肯定的是,假設每個應用程序允許低端Froyo /薑餅上的16MB和高端ICS/JB手機上的48MB之間。哎呀,我會樂觀的,並將上限提高到128MB(儘管我還沒有聽說過這種設備)。 :-)

  • 如果您的應用有其內存使用(通過鏈接的問題暗示)的問題,你想通過強制的活動下一次打開一個「乾淨」的石板去解決它,這種方法會工作。有點。但只要您的應用程序僅使用活動,它就會起作用。在您輸入ContentProviderService的那一刻,您不能再撥打exit()(如上所述),您將被迫正確解決問題。你可能只是咬緊牙關,現在就做。最簡單的方法是確保在完成特定位圖時調用Bitmap.recycle()。當然,只要你不需要在內存中保存更多的位圖,那麼這種方法就行得通,但這完全是一個完全獨立的野獸。 :-)
3

你不應該叫sytem.exit(0),讓Android的管理應用程序。如果我明白你有內存泄漏問題。我猜是因爲位圖。所以看看這個有效顯示位圖http://developer.android.com/training/displaying-bitmaps/index.html

如果您在onDestroy()方法中調用system.exit(0),您將無法在橫向和縱向之間翻轉。

+0

在景觀和肖像之間翻轉的好點。 –

+0

我正在製作一款始終處於風景中的遊戲,因此這不是一個大問題,但是感謝您提出這個遊戲。 – eBehbahani