2016-09-17 99 views
2

我有叫另外一個通過調用startActivity()的活動,一段時間後onSaveInstanceState(Bundle outState)叫我設置一個布爾valeu對onCreate(Bundle savedInstanceState)但是當這種方法被稱爲savedInstanceState來自空恢復。我已經在網上搜索了一個答案,但沒有找到我的案例。的Android - savedInstanceState空當parentActivityName充滿

這裏的onSaveInstanceState方法:

@Override 
    protected void onSaveInstanceState(Bundle outState) { 
     outState = new Bundle(); 
     outState.putBoolean(Constants.MAIN_ACTIVITY_STATE_RECREATED, true); 
     super.onSaveInstanceState(outState); 
    } 

onCreate

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    setTitle(R.string.activity_main); 
    if (savedInstanceState!=null && savedInstanceState.getBoolean(Constants.MAIN_ACTIVITY_STATE_RECREATED, false)){ 
     return; 
    } 
    //DO SOME STUFF 
} 

而這裏的活動我AndroidManifest聲明:

<activity android:name=".MainActivity" 
       android:screenOrientation="portrait" 
       android:configChanges="orientation|keyboardHidden"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 

      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 

這就是所謂的活動:

 <activity android:name=".PhotoUserActivity" 
        android:screenOrientation="portrait" 
        android:configChanges="orientation|keyboardHidden" 
      android:parentActivityName=".MainActivity"> 
     </activity> 

如果我從第二個活動的聲明中刪除parentActivityName,並自己創建「後退按鈕」,則第一個Activity的onCreate永遠不會被調用。

感謝您的幫助!

+0

你有解決它?我有同樣的麻煩:http://stackoverflow.com/q/41578258/1639556但我不創建nw捆綁實例。 –

+0

@LeosLiterak不幸的是,我用另一種方法來實現我的目標 –

回答

2

你不需要初始化outState變量,否則你將無法通過vallue。

@Override 
    protected void onSaveInstanceState(Bundle outState) { 
     //outState = new Bundle(); <-- Remove this 
     super.onSaveInstanceState(outState); 
     outState.putBoolean(Constants.MAIN_ACTIVITY_STATE_RECREATED, true); 
    } 

outState Bundle由框架提供,通過初始化它,例如, new Bundle()如果它包含任何內容,那麼您可能會在之前的Bundle上降低某些值。

總是建議在添加新值之前先撥打super.onSaveInstanceState(Bundle outState)

1

如果將應用程序的狀態保存在包中(通常爲非持久動態數據,其格式爲onSaveInstanceState),如果需要重新創建活動(例如,方向更改),則可以將其傳回至onCreate,以便您不要失去這個先前的信息。如果沒有提供數據,則savedInstanceState爲空。

...你 應該使用的onPause()方法,以任何持久性數據(如 用戶編輯)寫入存儲。另外,方法 onSaveInstanceState(Bundle)在將活動置於 這樣的背景狀態之前被調用,允許您將活動中的任何動態 實例狀態保存到給定的Bundle中,稍後在onCreate中收到 (Bundle )如果活動需要重新創建。 有關如何將流程的生命週期與其託管的活動綁定的詳細信息,請參閱流程生命週期部分。注意 ,因爲後者不是 生命週期回調的一部分,所以在onPause()而不是 onSaveInstanceState(Bundle)中保存持久數據非常重要,因此在其文檔中描述的 在每種情況下都不會被調用。

source