首先,問題是如何出現的?
晚上復查代碼,發現一個activity沒有調用自己的ondestroy方法 我表示非常的費解,於是我檢查了下代碼。 發現再finish代碼之后接了如下代碼 finish(); System.exit(0);//這就是罪魁禍首
為什么這樣寫會出現問題
System.exit(0);// //看一下函數的原型 public static void exit (int code) // Added in API level 1 //大意可以解釋為,調用此方法,將會停止javaVM的執行,相當於殺死了程序 Causes the VM to stop running and the program to exit with the given exit status. If runFinalizersOnExit(boolean) has been previously invoked with a true argument, then all objects will be properly garbage-collected and finalized first. 既然我們理解了,調用exit之后,程序會被殺死,整個程序都被意外(人為)的殺死了,這是非正常情況,故,Activiy的生命周期也不會繼續執行了。很好的解釋了為什么ondestroy不會執行的疑問。
那么,問題是如何解決的?
將 system.exit(0); 這段代碼從finish()之后移除,結果程序生命周期,執行正常。問題得到解決。 附注:我覺得這句話並不是必須寫的,作為安卓開發者,應當使用finish來合理的控制app的界面,而生命周期交給系統去處理,這樣才能編寫出健壯的程序代碼。
