Android Crash及應用退出問題

1、Crash相信是很多朋友開發過程經常遇到的問題。經過本人測試,Android在API21以下(也就是Android5.0以下),crash後會直接退出應用;但是在API21以上(5.0以上系統),會遵循以下原則重啓:

  • 包含service, 如果程序crash的時候,運行着service,那麼系統會重新啓動service 。
  • 不包含service,只有一個Activity,那麼系統不會重新啓動該Activity 。
  • 不包含service,但是當前棧中包含兩個Activity, A–>B, 如果B crash,那麼系統會重啓A。
  • 不包含service,但是當前棧中包含三個Activity, A–>B–>C, 如果C crash,那麼系統會重啓B,並且A仍然存在,即可以從重啓的Back到A。


2、Process.killProcess 或 System.exit(0) 當前進程確實也被 kill 掉了,但 app 會重新啓動,

又創建了一個新的進程,service也會被重啓,設置 onStartCommand 方法返回 START_NOT_STICKY,則service不會重啓

3、System.exit(0)是將你的整個虛擬機裏的內容都停掉了 ,而dispose()只是關閉這個窗口,但是並沒有停止整個application exit() 。無論如何,內存都釋放了!也就是說連JVM都關閉了,內存里根本不可能還有什麼東西
System.exit(0)是正常退出程序,而System.exit(1)或者說非0表示非正常退出程序
System.exit(status)不管status爲何值都會退出程序。和return 相比有以下不同點:return是回到上一層,而System.exit(status)是回到最上層
示例
在一個if-else判斷中,如果我們程序是按照我們預想的執行,到最後我們需要停止程序,那麼我們使用System.exit(0),而System.exit(1)一般放在catch塊中,當捕獲到異常,需要停止程序,我們使用System.exit(1)。這個status=1是用來表示這個程序是非正常退出。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章