2016-03-28 24 views
0

的onPause()和onSaveInstance()總是叫 配置changes.However的情況下,在一個特殊的情況下,如果程序員處理配置 比變化在這種情況下,它不會調用這些方法。理解的onPause()和結構變更時onSaveInstance()和殺死應用

「如果程序員正在處理配置更改」是什麼意思?這是否意味着如果以編程方式我們正在改變設備的方向,那麼這些方法將不會被調用?

的onPause()是將 ()只叫沒有失敗殺死application.So之前,我們應該保存的onPause 所有持久​​性數據的唯一功能。

但是,如果我們通過調用finish()方法則onDestroy()直接調用,onPause()完成我們裏面的onCreate活動,onStop()不叫。

+0

您是否測試過調用'finish()'時是否調用onPause()'?我的理解是,它將永遠被稱爲除崩潰 – PPartisan

+0

@PPartisan如果我們正在完成onCreate內的活動,那麼它不會被調用.. http://stackoverflow.com/questions/28777449/android-is-onpause-保證將被稱爲後處理 –

+0

每天學習新東西:)。也就是說,在'onCreate()'中調用'finish()'是一個確定的邊緣情況。在你提供的鏈接中的答案足以解釋爲什麼在這種情況下不調用onPause(),而是onDestroy()是 - 它是Android活動中生命週期對稱的一部分,而onDestroy()是爲了因爲如果我們在onConfigurationChanged方法上實現onPause()並且onSaveInstance()在配置更改期間沒有被調用,onCreate()會將'onPreate()'設置爲onResume()'onResume()' – PPartisan

回答

1

這是什麼意思,「如果程序員處理配置 變化」 .Does這意味着,如果以編程方式我們正在改變設備的 方向,那麼這些方法將不會被調用?

這意味着您作爲程序員必須手動設置配置更改時發生的情況。這個方法將被調用。

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
    } 
} 

所以,你處理如果方向和其他配置改變會發生什麼。

但是,如果我們通過調用完成整理我們的活動中的onCreate()方法 隨後的onDestroy()被直接調用,並在onPause,的onStop不 調用。

如果要通過調用finish來顯式銷燬活動,則應該重寫onDestroy方法並進行清理。我們正在討論如果您的應用在運行時發生變化(即發生電話呼叫,輪換髮生變化等),會發生什麼情況。

+0

? –

+0

我認爲http://developer.android.com/guide/topics/resources/runtime-changes.html會清除你的困惑 – aldok

1

「如果程序員正在處理配置更改」是什麼意思?這是否意味着如果以編程方式更改設備的方向,那麼這些方法將不會被調用?

這可能是指已將configChanges元素添加到其清單中的開發人員。