最近公司的大屏展示機器人上的程序運行時間長了,比如五天,十天會出現偶爾的崩潰,查日志可能是內存溢出或者是ndk層的錯誤,這種錯誤一時也不太好查找,但是產品那邊有個要求就是程序退出了一定要能重啟,能抓日志最好抓日志,然而ndk層的崩潰是無法重啟的。但是我們去查看日志的時候發現了一個規律。
雖然應用程序所在的程序被kill process了,但是不到兩秒的時間內,程序自定義的application又重啟了,只是activity沒有顯示出來,所以頓時有了一個想法是在application里做一個延時檢測,如果application啟動后兩秒的時間內沒有任何該程序的activity運行則打開MainActivity。
但是總感覺這種方法有點low,於是找了網上的一些其他方法,比如低內存的時候如何重啟app:https://blog.csdn.net/qq_14876133/article/details/82801579
運行程序后,在android studio里點擊logcat上的terminate application按鈕,殺掉activity后確實能很快的重啟,但是沒明白原因,比較特殊的是打開的第一個activity被殺后就不能重啟了,如果當前的activity棧前面還有一個activity的話,點擊terminate application,就會調用前一個activity的oncreate方法,然后可以在這個activtiy去把對應的界面打開。很懷疑這種機制,於是又寫了個demo測試,果然是這個現象。
所以如果不想讓自己的程序崩潰后沒有界面,可以寫一個baseactivtiy和一個splashactivity,baseactivity用來打開主界面,然后讓所有的activity都集成baseactivtiy,這樣無論哪個activity崩潰了都會打開主界面。
具體為什么會這樣還不太明白原理,待有時間繼續研究,此處做一個記錄