簡體   English   中英

活動生命周期的可靠性(onPause到onDestory)

[英]Reliability of the Activity Lifecycle (onPause to onDestory)

經過多年信任生命周期,我做了一點挖掘。 現在我不覺得好笑。

我知道並閱讀了很多關於onStop不能保證被調用等等。

我創建了一個帶有2個Activites和一個自定義Application類的簡單應用程序。 我在每個回調中放了一個Log.d(),我可以在一個帶有4.1的Galaxy S2上找到並玩。 Activity A在start和onResume上啟動它啟動Activity B. Activity B有一個Button,它創建一個Nullpointer但是它什么都不做。

現在擔心/混淆我的事情:

  • 如果我在buttonclick上創建一個nullpointer,應用程序崩潰並且兩個活動都沒有回調

  • 如果我按下電源按鈕並關閉屏幕,如果活動的顯示模式(縱向或橫向)與設備的原始方向不匹配,活動將重新啟動。 我知道這個以及如何覆蓋它但是如果它破壞並重新啟動我的活動它調用onPause並且isFinishing()返回false但活動正在完成並重新啟動。

  • 如果上面沒有發生,即使應用程序不再可見,也只會調用onPause

  • 啟動另一個活動,在A中調用onPause ,然后在onResume創建B,然后調用A的onStop 。現在我在.App類中跟蹤我的活動,如果我在onPause取消注冊A並在onResume注冊B,則會有一個分裂毫秒沒有注冊任何活動的地方。 如果我想在沒有任何活動時關閉某些服務,它會一直發生。 但是如果我在onStop取消注冊它(因此它們會重疊),當用戶點擊電源按鈕並且服務(或線程或其他)繼續運行並耗盡電池電量時,它將永遠不會被注冊。

我正在使用android已經有一段時間了,我正試圖實現一個相當復雜或讓我們說防彈設計。 但幾乎不可能跟蹤我的活動發生了什么。

  • 必須通過Intent.ACTION_SCREEN_OFF檢測斷電,但是當它已經關閉時會發生。 之前唯一的事就是onPause。

  • homebutton ... onUserInteraction和pause / stop的某種組合

很難簡單地確定我的APP(不僅僅是一個活動)何時不再被使用並放入后台以及何時只是在活動之間轉換或何時被系統關閉。 因為onTerminate()僅在模擬器中使用,因為.App類沒有終止回調,所以文檔說。

也許我只是沒有看到森林穿過樹林...幫助將不勝感激!

Android生命周期可能非常令人困惑,到目前為止,我發現只有一種方法可以讓您對周圍發生的事情有一個正確的認識。

你設計你的應用程序的方式是你總是假設你可以在任何時刻被殺死而沒有調用onDestroy()這樣的回調,因為無法保證它們會被調用。

檢查活動是否進入后台的簡單方法是因為另一個活動正在前面,所以使用一個簡單的標志:

boolean movingInApp = false;
....
movingInApp = true;
Intent intent...
.....
public void onPause() {
    if(movingInApp) {
        //Called because we're moving to another Activity in our own app
    }
}

public void onResume() {
    movingInApp = false;

}

通過在啟動任何意圖等之前將movingInApp的值設置為true ,您可以跟蹤調用onPause()的原因。 請記住稍后在onResume()方法中將其再次設置為false 如果系統讓您的應用程序轉到后台,這將是錯誤的,並且您知道您的應用程序已由其他人移動到后台,而不是您。

至於發生異常時沒有調用任何東西,只要有未捕獲的異常,Android就會殺死整個App進程。 您的應用程序只是停止運行,就像您強行退出計算機上的程序一樣。 系統殺死是完全沒有任何警告。 根本不再執行任何代碼。

暫無
暫無

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

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