生活随笔
收集整理的這篇文章主要介紹了
Activity的状态保存
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?? 當點擊home鍵或程序運行過程中突然來電話等意外情況或屏幕方向改變時,會調用onSaveInstanceState()方法進行保存數據到手機硬盤上,再次運行Activity時則調用onRestoreInstanceState()方法從硬盤中取出以保存的數據。也可從onCreate()方法中的bundle對象中取數據:
public?void?onCreate(Bundle?savedInstanceState) ?????{ ?????????super.onCreate(savedInstanceState); ?????????setContentView(R.layout.main); ?????????txt=(EditText)findViewById(R.id.txt); ?????????if?(null!=savedInstanceState&&savedInstanceState.containsKey(CONTENT)) ?????????{ ?????????????txt.setText(savedInstanceState.getString(CONTENT)); ?????????} ?????????secondBtn=(Button)findViewById(R.id.secondBtn); ?????????secondBtn.setOnClickListener(listener); ?????????Log.i(TAG,?"MainActivity-->onCreate"); ?????} ? ① onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它們不同于 onCreate()、onPause()等生命周期方法,它們并不一定會被觸發。當應用遇到意外情況(如:內存不足、用戶直接按Home鍵)由系統銷毀一個Activity時,onSaveInstanceState() 會被調用。但是當用戶主動去銷毀一個Activity時,例如在應用中按返回鍵,onSaveInstanceState()就不會被調用。因為在這種情況下,用戶的行為決定了不需要保存Activity的狀態。通常onSaveInstanceState()只適合用于保存一些臨時性的狀態,而onPause()適合用于數據的持久化保存。 另外,當屏幕的方向發生了改變, Activity會被摧毀并且被重新創建,如果你想在Activity被摧毀前緩存一些數據,并且在Activity被重新創建后恢復緩存的數據。可以重寫Activity的 onSaveInstanceState() 和 onRestoreInstanceState()方法,如下: public?class?PreferencesActivity?extends?Activity?{ ?????private?String?name; ?????protected?void?onRestoreInstanceState(Bundle?savedInstanceState)?{ ?????name?=?savedInstanceState.getString("name");??????super.onRestoreInstanceState(savedInstanceState); ?????} ?????protected?void?onSaveInstanceState(Bundle?outState)?{ ?????outState.putString("name",?"liming");?????super.onSaveInstanceState(outState); ?????} ?} ? 當Activity重新創建時,會先執行onCreate()方法,再執行onRestoreInstanceState()方法,也可以在onCreate()方法中取數據
?②使用Activity默認的Shared Preference,也可以保存數據。
?如果需要單擊返回按鈕退出程序后,下次進入仍然可以保留數據,可以在onPause()方法中設置共享參數,實際是將數據保存在系統的xml文件中
?protected?void?onPause(){ ?super.onPause(); ????????this.getPreferences(MODE_PRIVATE).edit().putString(TEXT_ENTRY_KEY,?myEditText.getText().toString()); ?} ? 在onResume()方法中取數據
?
protected?void?onResume(){ ?super.onResume(); ???????this.getPreferences(MODE_PRIVATE).edit().getString(TEXT_ENTRY_KEY,………… ?????} ? 注意:如果系統中有兩個Activity,一個處于暫停狀態,一個處于停止狀態,當內存不足時,系統會首先殺死停止狀態的Activity ?
轉載于:https://blog.51cto.com/dreamboy/723871
總結
以上是生活随笔為你收集整理的Activity的状态保存的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。