簡體   English   中英

公共靜態變量和Android活動生命周期管理

[英]Public static variables and Android activity life cycle management

根據文檔,Android操作系統可以殺死后端堆棧后面的活動。

所以,例如我說有一個應用程序並打開主要活動(讓我們稱之為活動A)。 在這個公共活動類中,我聲明並初始化一個公共靜態變量(讓我們稱之為“foo”)。 在Activity A的onCreate()方法中,我然后更改“foo”的值。 從活動A開始,用戶在我的應用程序中啟動另一個名為Activity B的活動。在活動B中使用變量“foo”。在用戶導航到其他應用程序中的某些其他活動后,活動B將暫停。 最終,在發生內存不足之后,可以殺死活動A然后活動B. 用戶導航回我的應用程序后,它會重新啟動(實際上是“重新創建”)活動B.

怎么了:

  1. 當活動A的onCreate()方法運行時,此時變量“foo”是否具有設置的值?

  2. 變量“foo”不存在?

  3. 變量“foo”存在,但現在是初始化值,而不是Activity A的onCreate()方法中設置的值?

如果進程被終止,則所有靜態變量將重新初始化為其默認值。

因此,您在活動A中設置的任何值都不會持續存在

從2:50 http://www.infoq.com/presentations/Android-Design可以看到很好的解釋

以下是那些想要手動測試此問題的人的一些說明:創建android v.4模擬器,然后轉到設置 - >開發人員設置 - >禁用后台任務。 然后用2個活動創建示例android項目,在活動A中聲明靜態變量,在onCreate()方法中初始化它。 在活動A中放置一個按鈕,用於啟動活動B.在活動B的onCreate()方法中,將A.staticVar的值打印到logcat。

啟動項目 - 出現活動A. 點擊按鈕 - 出現活動B,將靜態變量的值打印到logcat。 按主頁按鈕並啟動任何其他程序 - 您的示例項目進程將被終止(因為您已禁用后台進程)。 現在長按主頁按鈕 - 您將看到最近啟動的程序列表。 選擇你的示例項目 - 操作系統將嘗試將項目的活動恢復到堆棧並重新創建上次運行的活動B.但是在此步驟中,程序將因NullPointerException而崩潰,因為A.staticVar將為null,我們正在嘗試將其打印到logcat。

答案是(3)。 如果您需要保留值,請在每個活動暫停時將其保留在共享首選項中,並在恢復時將其恢復。 或者,您也可以維護“初始化”靜態標志,並在任何活動的onCreate()方法中重新初始化靜態變量onCreate()如果它是false)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM