題:
在Android手機中按下“主頁”按鈕時,正在運行的程序會如何處理?
sharptooth
2011-11-16 21:02:46 UTC
view on stackexchange narkive permalink

有一件事使我感到困惑。好像我在Android上使用某些程序並按“主頁”按鈕一樣,我看到主屏幕並可以重新運行該程序,並看到該程序與以前的狀態相同-看來該程序沒有完全重新啟動,只是暫停然後恢復。

不過,這似乎與Air Control遊戲並不一致。有時,當我在玩Air Control並按“ home”,然後重新運行Air Control時,它處於暫停狀態(就像我按“ pause”按鈕一樣),因此我可以繼續遊戲。有時候,同樣的情況也會導致Air Control放棄遊戲並重新開始。

所以看來我聽不懂。

這是怎麼回事?按下“ home”按鈕,程序會怎樣?它會繼續運行還是會做什麼?

我懷疑按下主屏幕按鈕會導致更高的功耗。
五 答案:
eldarerathis
2011-11-16 21:13:53 UTC
view on stackexchange narkive permalink

Android開發文檔 Tasks and Back Stack實際上很好地涵蓋了這一點。相關摘錄:

任務是一個內聚單元,當用戶開始新任務或通過HOME鍵進入主屏幕時,它可以移至“後台”。在後台,該任務中的所有活動都停止了,但是該任務的後堆棧保持不變-該任務只是在另一個任務發生時就失去了焦點,如圖2所示。然後,任務可以返回到“前景”,以便用戶可以從上次停站的地方接機。例如,假設當前任務(任務A)在其堆棧中具有三個活動-當前活動下有兩個活動。用戶按下HOME鍵,然後從應用程序啟動器啟動新應用程序。當出現主屏幕時,任務A進入後台。當新應用程序啟動時,系統會使用其自己的活動堆棧啟動該應用程序的任務(任務B)。與該應用程序進行交互之後,用戶再次返回Home並選擇最初啟動任務A的應用程序。現在,任務A成為前台-堆棧中的所有三個活動均保持不變,並且堆棧頂部的活動恢復。此時,用戶還可以通過返回主頁並選擇啟動該任務的應用程序圖標(或通過觸摸並按住HOME鍵顯示最近的任務並選擇一個)來切換回任務B。這是一個在Android上執行多任務的示例。

注意:可以一次在後台保留多個任務。但是,如果用戶同時運行許多後台任務,則係統可能會開始破壞後台活動以恢復內存,從而導致活動狀態丟失。有關活動狀態,請參見以下部分。

摘要:當您按下 Home 時,任務將移至後台並位於內存中,實際上並沒有執行任何操作並保持其狀態。這意味著(通常而言)您可以切換回該任務,它將在中斷的位置繼續執行。但是,如果需要回收內存,Android系統可以並且將殺死後台任務。什麼時候以及如果發生這種情況完全取決於系統,這也許就是為什麼您在恢復時看到不一致的行為的原因。

如果任務被系統銷毀,則在啟動時必須重新創建它再來一次。因此,除非應用程序作者採取措施在銷毀過程中保存應用程序的狀態,否則它將丟失(並且在遊戲中保存 exact 狀態非常不切實際)。

另一個很好(但也很冗長)的文檔是覆蓋 Activity Lifecycle(如果您向下滾動會有一個不錯的流程圖)的文檔。

因此,它們是根據每個任務而不是每個活動/流程殺死的。後者將導致部分任務被殺死,這可能是不希望的。
GAThrawn
2011-11-16 21:18:37 UTC
view on stackexchange narkive permalink

Home kbd>會將您從應用切換到主屏幕,同時使應用在後台運行。這有點像在Windows PC上的兩個窗口之間切換。

除了手機在內存等資源不足的情況下,它將開始關閉在後台運行的應用程序,因此手機具有足夠的資源來執行您現在要執行的操作。遊戲通常是手機會“殺死”以節省資源的首批應用程序之一,因為它們通常比其他應用程序佔用更多的內存和CPU。這就是為什麼有時您的遊戲仍處於暫停狀態,而有時Android已為您關閉遊戲的原因。

後退 kbd>按鈕是關閉應用程序以使其真正關閉的方式。

另請參見在Android中關閉應用程序的正確方法是什麼?

Flow
2011-11-16 21:23:06 UTC
view on stackexchange narkive permalink

按下 Home鍵 允許用戶通過顯示啟動器來啟動新任務。所有活動任務(因此包括“空氣控制”示例在內的“活動”) )將調用其 onPause()方法。

取決於應用(及其活動)在出現時恢復確切的先前狀態背面可見。當Activity處於後台時,Apps Process也有可能被殺死,但這不會影響用戶體驗。用戶是否應該分辨一個活動是剛剛被暫停還是被殺死。這可以解釋Air Control的不同行為,這可能暗示了Android生命週期管理的錯誤實現。

我認為“殺死”是指您停止而不是摧毀。我相信使用一般的Linux術語,當您殺死某個進程(例如Activity)時,便會“ destroy()”相應的應用程序組件。
不,我的意思是摧毀。
當您按下Home鍵時,將調用`onStop`方法。被終止的進程並不意味著該活動會調用其“ onDestroyed”方法,儘管它確實很相似。 “殺死”活動進程意味著將VM從RAM中刪除。對我而言(Android將其殺死)似乎可能會影響用戶體驗。
Gdalya
2011-11-17 23:27:48 UTC
view on stackexchange narkive permalink

我在這個網站上的聲譽仍然太低,無法投票支持,因此我在回答emphaisze Flow的答案。我一直在我的一個應用程序中遇到此問題。我有各種微調器控件,您必須將它們的狀態顯式保存在onPause()中,然後將其狀態恢復到onResume()中-Android不會自動記住它們的狀態。

另一個麻煩之處在於,有時Android當您只希望應用程序的onCreate()函數調用onResume()時,它將調用該函數。

因此,您的Air Control(或任何其他應用程序)問題是特定於該應用程序的,因此應向開發人員進行更正。

順便說一句,如果您想了解應用程序的生命週期,建議使用Ed Burnette的《 Hello Android》的第2章,尤其是圖2.3。

Dylan Yaga
2013-01-10 17:29:44 UTC
view on stackexchange narkive permalink

主頁按鈕在應用程序中時按下:

大多數應用程序將保存其狀態(恢復狀態時保持其一致性所需的任何數據),以及

主頁按鈕在主屏幕上時按下:

這可以由許多第三方啟動器配置;但是,其中許多默認設置是使您返回“主”主屏幕(默認啟動器會執行此操作)。

您的朋友可能會擔心的問題:

切換應用程序可能會佔用大量內存,並導致多次寫入磁盤來保存數據。這使用電池;但是,這通常不是導致設備電池耗盡的主要原因(操作系統已針對這些問題進行了優化)。

某些應用程序將繼續作為後台應用程序運行,因此按下主屏幕按鈕不會殺死它們(例如,在按下主屏幕按鈕後,Google Play音樂仍會播放)。

您的朋友可能會擔心通過按“主頁”按鈕您沒有退出該程序,因此該程序仍在運行。 Android會根據需要卸載這些應用程序。

您和您的朋友應該更加關注顯示屏-它消耗最多的電量。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...