2013-11-14 22 views
0

基本上我的應用程序有2個活動。「A」和「B」 。 A推出B.處理SavedInstances和恢復活動

活動B播放音樂,也有通知。案例1:當視圖仍然處於活動B'時,我按下主頁按鈕,然後點擊通知,活動B打開,其視圖完好無損,音樂播放(因爲在清單中,我正在使用android:launchMode =「singleTop」,因此不會創建活動的另一個實例)這部分是根據需要的...... 但是

情況2:當視圖在活動B上,然後按下後退按鈕,活動A出現,然後我點擊通知,活動B打開與視圖丟失,音樂也停止(不需要)......我猜測,這是因爲當我按下後退按鈕該活動被破壞,所以我必須恢復它的視圖,以恢復其視圖我overrid Ë兩種方法.....

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    // Save UI state changes to the savedInstanceState. 
    // This bundle will be passed to onCreate if the process is 
    // killed and restarted. 
    savedInstanceState.putBoolean("boolMusicPlaying", boolMusicPlaying); 
    savedInstanceState.putInt("swapnumber", swapnumber); 
    savedInstanceState.putString("seekbarprogress", progress2); 
    savedInstanceState.putInt("position.seekbar",seekbar.getProgress()); 
    savedInstanceState.putString("seekmaxString", max2); 
    savedInstanceState.putInt("seekmaxInt",seekMax); 
    savedInstanceState.putParcelableArrayList("songfetails",songdetails); 
    super.onSaveInstanceState(savedInstanceState); 


} 
//make a note ....even if i don't override onDestroy() and don't call on SaveInstanceState explicitly, then too i am not getting any desired effect....... 
@Override 
public void onDestroy() 
{ Bundle savedState = new Bundle(); 
onSaveInstanceState(savedState);//because of this line....the app is crashing...... 
super.onDestroy(); 
    } 

,但它並沒有幫助..... 並在創造我把一張支票,如果保存的情況下爲空或不是....創建相應的視圖...(即從保存的實例或從新鮮),但它並沒有幫助... 此行也是崩潰... onSaveInstanceState(savedState);即使我不覆蓋ondestroy()並從任務殺手手動殺死應用程序,然後嘗試打開活動B,然後也保存的實例的東西應該正常工作,因爲方法OnSaveInstanceState將被自動調用然後,右???請幫助

+0

的onSaveInstanceState'(savedState)'就是爲什麼你打它明確 – Raghunandan

+0

閱讀完整的東西請....即使活動類的覆蓋方法我不要調用它......它會在任務殺手殺死應用程序時自動調用?所以在這種情況下,爲什麼不顯示(恢復)視圖? –

+0

@Raghunandan在這eg..in檢查答案..這傢伙明確調用它http://stackoverflow.com/questions/10492637/android-saveinstancestate-understanding –

回答

1

基本上,如果你按下後退按鈕,活動的恢復應該使用shared preferences/or a database做,但如果你還沒有按下後退按鈕,然後你要恢復的活動的狀態(因爲活性由系統破壞)那麼bundle savedinstances可用於...

1

從Android文檔:

因爲當用戶按下後退或活動完成本身的活性被破壞,該活動實例的系統的概念,是因爲行爲一去不復返表示活動不再需要。但是,如果系統由於系統限制(而不是正常的應用程序行爲)而破壞了活動,那麼雖然實際的活動實例已經消失,但系統會記住它已存在,因此如果用戶導航回它,系統會創建一個新的使用一組保存的數據描述活動在銷燬時的狀態。系統用於恢復先前狀態的已保存數據稱爲「實例狀態」,是存儲在Bundle對象中的鍵值對的集合。

要解決第二個問題,你必須還原數據形成一些其他來源(服務播放音樂,從恢復應用程序上下文或單等信息)

欲瞭解更多信息檢查this

+0

很簡單,如果你明確地銷燬它,你就不能恢復活動狀態,而你通過按回來按鈕來完成活動。在這種情況下,忘記捆綁包,並保存你的數據一些其他的磨損,並在'onCreate()'方法中恢復它。如果這不是你正在尋找的答案,那麼更新你的問題,因爲沒有人知道它...... – XeNoN

+0

好的,你的評論是我的答案......「它不會幫助,因爲它被明確銷燬」 我已接受你的答案...這裏是一個問題的修改版本 http://stackoverflow.com/questions/19987755/how-to-restore-activity-state-onsavedinstancestate-wont-help –

+0

@ user2993677這是一個重複標記它 – Raghunandan