2017-03-09 71 views
1

在調用方法onPause()之前活動是否暫停?谷歌的參考文獻說,當一個活動暫停時,它可以在極低的內存情況下被系統殺死。它也認爲我們應該在onPause()中提交未保存的更改,所以我猜想在調用onPause()之後活動進入暫停狀態)但我不知道如何證明。 所以我想知道是否是真的嗎?有沒有一種方法可以返回當前的活動狀態?在調用onPause()之前活動是否暫停?

+0

你想從我們這裏得到什麼? –

+0

好吧,他們似乎告訴它[在lyfecyle指南](https://developer.android.com/guide/components/activities/activity-lifecycle.html#onpause) – AxelH

+0

看到這個鏈接https://github.com/xxv/android-lifecycle – g4s8

回答

1

活動從Instrumentation類暫停從callActivityOnPause,這是非常簡單的:

/** 
* Perform calling of an activity's {@link Activity#onPause} method. The 
* default implementation simply calls through to that method. 
* 
* @param activity The activity being paused. 
*/ 
public void callActivityOnPause(Activity activity) { 
    activity.performPause(); 
} 

它只是調用ActivityperformPause方法:

final void performPause() { 
    mDoReportFullyDrawn = false; 
    mFragments.dispatchPause(); 
    mCalled = false; 
    onPause(); 
    mResumed = false; 
    if (!mCalled && getApplicationInfo().targetSdkVersion 
      >= android.os.Build.VERSION_CODES.GINGERBREAD) { 
     throw new SuperNotCalledException(
       "Activity " + mComponent.toShortString() + 
       " did not call through to super.onPause()"); 
    } 
    mResumed = false; 
} 

正如你可以看到被稱爲內performPause,所以你是對的:

調用onPause()後,活動進入暫停狀態。

+0

非常感謝。現在我明白了爲什麼谷歌建議我們在onPause()中提交更改,因爲可以終止處於暫停模式的活動。因爲在onPause()方法返回之前該活動未暫停。 –

2

可以的Android生命週期https://developer.android.com/guide/components/activities/activity-lifecycle.html的官方文檔中找到:

「的onPause」被稱爲當活動進入後臺活動生命週期的一部分,但還沒有(還)被殺害。與onResume()的對應部分。

@Override 
protected void onPause() { 
    super.onPause(); 
    Log.v(TAG, "onPause is called"); 
} 
+0

你應該編輯你的答案,指出第一行的來源,因爲這是來自官方文檔;)這是更好的,因爲這不是一個簡單的句子,你發明了 – AxelH

+0

謝謝,我更新它 –

0

我想你可以添加一些變量來檢查你的Activity的狀態。 創建一個boolean isPaused這成爲true ,假onResume等 做同樣的敵人你想檢查每個國家。 無論如何,我沒有看到不相信官方文件的理由。

0

onPause在活動暫停之前被調用。

當活動進入暫停模式時,它仍然可以顯示給用戶!所以當活動停止時(onStop),用戶不再可見。

你想要證明什麼?

0

onPause()方法是android中的一個預定義方法,因此它總是自動調用。