2013-04-14 134 views
0

使用NDK近一年後,我意識到Android中的流程生命週期與活動生命週期不同。Android活動生命週期與流程生命週期

更具體地說,我的本機庫被加載到OnCreate中,但是在onDestroy中它沒有被卸載(我甚至不知道你是否可以在這裏卸載本地庫),但是在下一個OnCreate中,它仍然是一樣的進程,所以來自我的本地庫的所有全局變量仍然保持其狀態。對於Java中的靜態變量也是如此。

這對於Android 2.3來說相當不錯,但我最近進入了Android 4.2.2,並且發現了一些非常奇怪的東西。現在有可能讓這個進程死掉,並且這個活動只是調用RESTart()(或者我從閱讀日誌中得到的結果),這種說法很古怪,因爲我認爲onCreate會在進程結束後被調用實例化,但他保留不同的選項卡,因爲他在「活動」而不是過程中進行思考。所以基本上,如果我暫停其中一個應用程序很長時間(比如說1個小時以上),然後回到它,通常會導致崩潰。從設備日誌

摘錄:

04-14 04:41:34.886 2376 2376 I am_on_paused_called: [0,com.re3.benchmark.AboutActivity] 
04-14 05:06:26.128 386 594 I am_proc_died: [0,2376,com.re3.benchmark] 
04-14 13:19:44.256 386 538 I am_proc_start:[0,4761,10062,com.re3.benchmark,activity,com.re3.benchmark/.AboutActivity] 
04-14 13:19:44.295 386 595 I am_proc_bound: [0,4761,com.re3.benchmark] 
04-14 13:19:44.397 386 595 I configuration_changed: 5248 
04-14 13:19:44.459 386 595 I am_restart_activity: [0,1115347592,8,com.re3.benchmark/.AboutActivity] 
04-14 13:19:44.701 4761 4761 I am_on_resume_called: [0,com.re3.benchmark.AboutActivity] 
04-14 13:19:44.881 386 401 I am_activity_launch_time: [0,1115347592,com.re3.benchmark/.AboutActivity,631,631] 
04-14 13:19:52.725 386 595 I am_crash: [4761,0,com.re3.benchmark,8961606,java.lang.NullPointerException,NULL,REFramework.java,330] 
04-14 13:19:52.725 386 595 I am_finish_activity: [0,1115347592,8,com.re3.benchmark/.AboutActivity,crashed] 
04-14 13:19:52.772 386 595 I am_pause_activity: [0,1115347592,com.re3.benchmark/.AboutActivity] 

PS:我的確意識到崩潰源於我的代碼,但我的代碼並沒有真正處理onRestart是第一個功能,在整個過程中被調用(因爲它會繞過我的本地庫初始化,因爲我期望onCreate被首先調用)。

回答

1

您可能應該在Application.onCreate中加載本機庫,而不是Activity

如果您有超過1 Activity,則只會創建當前可見,並且如果您在第一個Activity中加載lib,則此時不會加載它。

+0

是的,同意但從AboutActivity轉到MainActivity時實際崩潰。 AboutActivity只顯示一些文本,它不會與本地lib交互。有時我會在MainActivity中將其打開,在那裏我加載庫,當我恢復到它時,它會崩潰,我按下ok,奇怪的是它再次啓動應用程序,這次使用onCreate&stuff。通常當應用程序崩潰時,它不會像那樣重新啓動。 – RelativeGames