Android 台灣中文網

標題: 呼叫內建相機拍完照第一頁的activity被回收的問題 [打印本頁]

作者: lkk47    時間: 2012-12-21 14:51
標題: 呼叫內建相機拍完照第一頁的activity被回收的問題
本帖最後由 lkk47 於 2012-12-21 15:25 編輯

我的流程是這樣的 activity(1) > activity(2) > activity(3)  然後 activity(3) 是呼叫內建相機的activity , 當我到activity(3)拍完照儲存完畢後按返回回到activity(2), 再按一次返回回到activity(1), 這時activity(1)就會跑onCreate > onStart > onResume 這樣的流程就是activity(1)被回收後在啟動的流程, 有時又會跑到onRestart, 但是跑到onRestart這才正確也是我要的跑法.

請問返回跑到onCreate是不是activity(1)被回收掉了?
如何避免activity(1)不被回收呢?

剛剛從開機在測試就很正常 真的很懷疑內存不足造成activity(1)被回收掉 不然就是韓國人陰謀(s3測試)
作者: ploglin    時間: 2012-12-21 17:24
幫不到你。請參考 http://code.google.com/p/androidbmi/wiki/LifeCycle

Activity 的狀態
Android 的虛擬機(VM)執行Activity時主要有四種狀態:

Active (活動)
Paused (暫停)
Stopped (停止)
Dead (已回收或未啟動)
Active (活動)
「Active」狀態是使用者啟動應用程式或 Activity 後,Activity 運行中的狀態。

在 Android 平台上,同一個時刻只會有一個 Activity 處於活動(Active)或運行(Running)狀態。其他的 Activity 都處於未啟動(Dead)、停止(Stopped)、或是暫停(Pause)的狀態。

Paused (暫停)
「Paused」狀態是當 Activity 暫時暗下來,退到背景畫面的狀態。

當我們使用Toast、AlertDialog、或是電話來了時,都會讓原本運行的 Activity 退到背景畫面。新出現的Toast、AlertDialog等介面元件蓋住了原來的 Activity 畫面。Activity 處在「Paused」狀態時,使用者無法與原 Activity 互動。

Stopped (停止)
「Stopped」狀態是有其他 Activity 正在執行,而這個 Activity 已經離開螢幕,不再動作的狀態。

透過長按「Home」鈕,可以叫出所有處於「Stopped」狀態的應用程式列表。

在「Stopped」狀態的 Activity,還可以透過「Notification」來喚醒。「Notification」會在後面章節中解說。

Dead (已回收或未啟動)
「Dead」狀態是 Activity 尚未被啟動、已經被手動終止,或已經被系統回收的狀態。

要手動終止 Activity,可以在程式中呼叫「finish」函式。我們在加入選單一章中已經提到過了。

如果是被系統回收,可能是因為記憶體不足了,所以系統根據記憶體不足時的回收規則,將處於「Stopped」狀態的 Activity 所佔用的記憶體回收。

記憶體不足時的行為
記憶體不足時,Dalvik 虛擬機會根據其記憶體回收規則來回收記憶體:

先回收與其他 Activity 或 Service/Intent Receiver 無關的行程(即優先回收獨立的Activity)
再回收處於「Stopped」狀態的其他類型 Activity(在背景等待的Activity)。最久沒有使用的 Activity 優先回收(比較官方的說法是 "根據 LRU 演算法...")
還不夠?回收 Service 行程
快不行啦,關掉可見的 Activity/行程
關閉當前的 Activity
當系統缺記憶體缺到開始「4. 關掉可見的 Activity/行程」時,大概我們換機子的時機也早該到啦!
作者: lkk47    時間: 2012-12-22 13:27
ploglin 發表於 2012-12-21 17:24
幫不到你。請參考 http://code.google.com/p/androidbmi/wiki/LifeCycle

Activity 的狀態

我解決  解決方式加大手機內存  哈哈  問題就在內存不足我從開機正常了




歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1