2014-04-18 147 views
0

我是新來的android開發,現在我想了解android活動的生命週期。onPause方法沒有被調用

我有這些方法對logcat的打印生命週期的過程:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Log.d(tag, "In the onCreate() event"); 
} 

public void onStart() { 
    super.onStart(); 
    Log.d(tag, "In the onStart() event"); 
} 

public void onRestart() { 
    super.onRestart(); 
    Log.d(tag, "In the onRestart() event"); 
} 

public void onResume() { 
    super.onResume(); 
    Log.d(tag, "In the onResume() event"); 
} 

public void onStop() { 
    super.onStop(); 
    Log.d(tag, "In the onStop() event"); 
} 

public void onDestroy() { 
    super.onDestroy(); 
    Log.d(tag, "In the onDestroy() event"); 
} 

問題是在onPause()永遠不會被調用。我嘗試按Home鍵,從最近的應用程序列表中選擇其他應用程序,關閉屏幕顯示,但它只是直接調用onStop(),而不是調用onPause(),然後onStop()。我正在閱讀的書說,如果活動被推入後臺,它支持onPause(),然後是onStop()。

本書內容:

Click the Phone button on the Android emulator so that the activity is pushed to the background. 
Observe the output in the LogCat window: 
11-16 06:32:00.585: D/Lifecycle(559): In the onPause() event 
11-16 06:32:05.015: D/Lifecycle(559): In the onStop() event 

我跑4.2.2測試真實設備和虛擬設備運行2.3.3,但結果是一樣的。我只是誤解了onPause的目的,或者我正在做錯onPause被調用?

編輯:你可以告訴我onStop()是否在onPause()之後調用什麼時候調用onResume()?是不是onResume支持恢復由onPause()暫停?在我的測試程序中,onResume()僅在onStart()之後在onPause()之後調用。可能是因爲我只有一項活動?

+2

你不重寫'Activity.onPause'。 – adneal

+1

該代碼不顯示任何'onPause()'方法的日誌記錄。你怎麼知道它沒有被調用?相信我......它會被調用。 – Squonk

+0

感謝大家回答我愚蠢的問題。我無法相信我沒有注意到這一點。 :( –

回答

2

您還沒有重寫onPause()方法。

public void onPause() { 
    super.onPause(); 
    Log.d(tag, "In the onPause() event"); 
} 
2

確實被調用。但是我的代碼中看不到覆蓋的。

onStop在之後被調用,當系統認爲這是休眠活動的好主意。這通常發生在您切換應用程序等時。onResume在顯示活動/片段時會在onStart之後調用。 onResume是您轉儲應在用戶看到UI之前運行的代碼的地方。

+0

嗨@meredrica,你能回答我的編輯問題嗎? :) –

+1

你去了。希望這可以幫助 – meredrica

1

當重寫在Java中的方法,這是一個非常好的習慣使用@Override註釋:

@Override // <---- THIS ! 
public void onDestroy() { 
    super.onDestroy(); 
    Log.d(tag, "In the onDestroy() event"); 
} 

這樣,編譯器會幫你如果你拼錯了方法的名稱,它會說該方法不是一個覆蓋。

試着總是強調這個方法被覆蓋,而不是一個簡單的方法。

在這裏,是的,其他人是對的,你沒有覆蓋方法。你不能說它是否被調用。