參考:掘金1、掘金2、CSDN、StackOver1、龍崗山上的倉鼠、StackOverflow2、StackOverflow3、DevAndroid1、DevAndroid2、DevAndroid3、DevAndroid4
說明:
首先,Google不建議開發者自己殺掉整個App Process,而是交由系統處理,只要畫面全部finish()即可,而且有在各畫面的onDestroy()處理掉該處裡的東西(Thread、Handler、interface...),這樣gc在整理時應該會順利清除。
甚至建議開發者不要在App裡加離開按鈕。
看來真有人照做,我看LINE、FB、FB Messenger都是在Root Activity(最下層的)時再按返回,就回到桌面,但其實process沒死,點icon再開,不會從啟動畫面(splash screen)進去。但如果從多工鍵(Overview Button)進去滑掉他的Task(這才真的殺掉process),下次就會重啟。
另外,Play商店、GMail、YouTube不管有沒有滑掉,離開再點icon都是從同樣畫面進去,只是這三隻也都沒離開鈕,都是在Root Activity時再按返回,就回到桌面了。
但是,Dev是每個都那麼強嗎?不會少處理造成MemoryLeak而無法回收嗎?
或是說工程師的潔癖就是不要留太多垃圾等打掃阿姨(GC)來收呀 XD
如果,你不聽Google言,一定要做Quit App,就看掘金1、掘金2這兩篇選個方法做吧
裡面方法實在太多種了:
簡單說,殺掉process的方式有以下兩種,效果看來一樣..
System.exit(0); 跟 android.os.Process.killProcess(android.os.Process.myPid());
只是在做這件事之前,你要先把Activities關閉,才不會造成重啟。
所以啦,
- 如果你的Quit()寫在RootActivity,或只有一個Activity,只要把自己finish()然後再exit(0),就好了。
- 如果你的Quit()寫在非RootActivity也可調用,那你就finish()所有Activities,然後再exit(0)吧。這方法很多,以下推幾種:
如果你min=API 21+,可以用finishAndRemoveTask();
如果你min=16+且只有一個Task,可以用finishAffinity();
如果你min<16或有多個Tasks,那可用List保存Activities法。
沒有留言:
張貼留言