如果后台的Activity由於某原因被系統回收了,如何在被系統回收之前保存當前狀態?


onSaveInstanceState() 當你的程序中某一個Activity A在運行時,主動或被動地運行另一個新的Activity B,這個時候A會執行onSaveInstanceState()。B完成以后又會來找A,
這個時候就有兩種情況:一是A被回收,二是A沒有被回收,被回收的A就要重新調用onCreate()方法,不同於直接啟動的是這回onCreate()里是帶上了參數savedInstanceState;而沒被收回的就直接執行onResume(),跳過onCreate()了。

 另外,剛才查看了一下Activity的源碼,發現Activity還有個onRestoreInstanceState(Bundle outState)方法.這個方法的描述中也寫到在Activity回復先前保存的狀態時會被調用.

首先要在你要保存的activity中添加如下的代碼。這個是用來保存參數的。
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
Log.d("save", "from onsaveinstancestate");
String statetext=tView1.getText().toString();
String statetime=tView2.getText().toString();
String cmccipconfigString=ipconfigString;
String cmccreferer=lastreferer;
String cmcclastcookieString=lastcookieString;
String cmccnewlastnewparam=newlastnewparam;
String cmccuserZhangHaoString=userZhangHaoString;
outState.putString("state", statetext);
outState.putString("time", statetime);
outState.putString("cmipconfigstring", cmccipconfigString);
outState.putString("cmreferer", cmccreferer);
outState.putString("cmlastcookiestring", cmcclastcookieString);
outState.putString("cmnewlastnewparam", cmccnewlastnewparam);
outState.putString("cmuserzhanghaostring", cmccuserZhangHaoString);
Log.d("save", "from onsaveinstancestate");
}
2
通過這種主方法,你就成功的實現了保存你要的數據。在你的應用被kill之前。系統一定會調用這個方法為你保存相應的參數,但你如果人為的關閉這個activity又是一說,系統就不會去調用這個方法了。
3
接下來如何在再次打開的時候恢復你要的數據呢?接下來就在oncreate中實現這個功能。代碼如下。
if(savedInstanceState!=null){
SharedPreferences getwifiname=getSharedPreferences("wangxing", MODE_PRIVATE);
wifinameBoolean=getwifiname.getBoolean("cmcc", false);
String statetextString=savedInstanceState.getString("state");
tView1.setText(statetextString);
String statetimeString=savedInstanceState.getString("time");
tView2.setText(statetimeString);
if(wifinameBoolean==false){
}
else {
        String cmccipconfigStringString=savedInstanceState.getString("cmipconfigstring");
        ipconfigString=cmccipconfigStringString;
        String cmccrefererString=savedInstanceState.getString("cmreferer");
        lastreferer=cmccrefererString;
        String cmcclastcookiestringstringString=savedInstanceState.getString("cmlastcookiestring");
        lastcookieString=cmcclastcookiestringstringString;
        String cmccnewlastnewparamString=savedInstanceState.getString("cmnewlastnewparam");
        newlastnewparam=cmccnewlastnewparamString;
        String cmccuserzhanghaostringstringString=savedInstanceState.getString("cmuserzhanghaostring");
        userZhangHaoString=cmccuserzhanghaostringstringString;
}
Log.d("save", "from saveinstance in denglu");
}
在oncreate中加上這段代碼就可以了。當這個activity被再次打開的時候,它就會自動的檢查上次有沒有保存相關的數據,如果沒有話就直接啟動,但如果有數據的話,就執行這個if中的方法了,這樣就達到了你要恢復的目的了。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com