2016-05-29 80 views
0

我不知道/瞭解有關Android回調方法及其實現的內容。Android回調方法:什麼時候?怎麼樣?從wheech Thread?

我有一個簡單的活動與實現的回調,如:

@Override 
onResume() { 
    Log.i(TAG, "onPause()"); 
} 

@Override 
onDestroy() { 
    Log.i(TAG, "onDestroy()"); 
} 

onButtonPressed() { 
    while(true) { 
     Log.i(TAG, "onButtonPressed()"); 
     SystemClock.sleep(1000); 
    } 
} 

當我開始我的應用程序,改變屏幕的方向,我可以看到的onPause()和的onDestroy()日誌控制檯。但是,當我按測試按鈕(onButtonPressed())和一個持久的過程開始(而爲true)時,我只能在控制檯上看到onButtonPressed()日誌。我可以旋轉我的手機,並且根據方向查看該活動已轉向,但未調用onDestroy()和onPause()(未在控制檯中登錄)回調。

是我的活動仍然方向變化時重現?爲什麼回調沒有被調用?他們是否需要其他線程?

任何人都可以澄清這對我來說情況,並解釋了Android的究竟如何執行將回調方法的調用?

測試上AndroidN。

謝謝。

更新: 看起來這是我的錯誤。 當我旋轉手機時,我看到屏幕正在旋轉,但並沒有理解活動不是......它只是放在屏幕的一側(試圖找到它是Android N上的開發人員預覽錯誤)。這讓我感到困惑:d

enter image description here

感謝答案和幫助。

回答

3

除非文檔所有方法調用和回調主線程(UI線程)上通常處理另有規定。

這適用於您的示例中的所有生命週期方法,例如onResume()onDestroy()以及UI回調,例如onButtonPressed()

在你進入無限while循環,你完全佔用UI線程所以沒有生命週期的方法可以運行了,並且用戶可以與應用程序不再進行交互的第二個例子。這就是爲什麼當你旋轉設備時,你看不到正在打印的日誌語句。目前的Activity從未銷燬,並且無法創建新的Activity,因爲您有無限循環負責這樣做的線程。

這也是爲什麼Android文檔建議將所有長期運行操作關閉UI線程,這樣你就不會產生負面的用戶體驗產生不良影響。

相關問題