日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

1.4Activity保存现场状态

發(fā)布時(shí)間:2023/12/10 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.4Activity保存现场状态 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

概念:

保存Activity的狀態(tài)是非常重要的,例如我們?cè)谕嬉粋€(gè)游戲的時(shí)候,突然來(lái)了一個(gè)電話,這個(gè)時(shí)候在接聽(tīng)完電話之后我們返回到游戲中,這個(gè)時(shí)候我們希望游戲還是之前那個(gè)進(jìn)度,或者說(shuō)發(fā)生突發(fā)事件,游戲這個(gè)應(yīng)用程序被關(guān)閉了,這個(gè)時(shí)候我們?nèi)绻僦匦麓蜷_(kāi)游戲的話,我們?nèi)绻€是希望回到之前的進(jìn)度,我們就需要將其狀態(tài)保存起來(lái),這樣在Activity的摧毀時(shí),我們還能夠根據(jù)保存的狀態(tài)回到之前的進(jìn)度。這就是Activity的狀態(tài)保存。

?

生命圖:

?

一般來(lái)說(shuō), 調(diào)用onPause()和onStop()方法后的activity實(shí)例仍然存在于內(nèi)存中, activity的所有信息和狀態(tài)數(shù)據(jù)不會(huì)消失, 當(dāng)activity重新回到前臺(tái)之后, 所有的改變都會(huì)得到保留.?

但是當(dāng)系統(tǒng)內(nèi)存不足時(shí), 調(diào)用onPause()和onStop()方法后的activity可能會(huì)被系統(tǒng)摧毀, 此時(shí)內(nèi)存中就不會(huì)存有該activity的實(shí)例對(duì)象了. 如果之后這個(gè)activity重新回到前臺(tái), 之前所作的改變就會(huì)消失. 為了避免此種情況的發(fā)生, 開(kāi)發(fā)者可以覆寫(xiě)onSaveInstanceState()方法. onSaveInstanceState()方法接受一個(gè)Bundle類(lèi)型的參數(shù), 開(kāi)發(fā)者可以將狀態(tài)數(shù)據(jù)存儲(chǔ)到這個(gè)Bundle對(duì)象中, 這樣即使activity被系統(tǒng)摧毀, 當(dāng)用戶(hù)重新啟動(dòng)這個(gè)activity而調(diào)用它的onCreate()方法時(shí), 上述的Bundle對(duì)象會(huì)作為實(shí)參傳遞給onCreate()方法, 開(kāi)發(fā)者可以從Bundle對(duì)象中取出保存的數(shù)據(jù), 然后利用這些數(shù)據(jù)將activity恢復(fù)到被摧毀之前的狀態(tài).

需要注意的是, onSaveInstanceState()方法并不是一定會(huì)被調(diào)用的, 因?yàn)橛行﹫?chǎng)景是不需要保存狀態(tài)數(shù)據(jù)的. 比如用戶(hù)按下BACK鍵退出activity時(shí), 用戶(hù)顯然想要關(guān)閉這個(gè)activity, 此時(shí)是沒(méi)有必要保存數(shù)據(jù)以供下次恢復(fù)的, 也就是onSaveInstanceState()方法不會(huì)被調(diào)用. 如果調(diào)用onSaveInstanceState()方法, 調(diào)用將發(fā)生在onPause()或onStop()方法之前,所以我們?cè)趏nSaveInstanceState() 方法中只能用來(lái)保存我們的Activity的臨時(shí)的狀態(tài)信息,而對(duì)于要持久化保存的對(duì)象或狀態(tài),我們應(yīng)該在 onPause() 方法中來(lái)做

?

界面:

?

代碼:

import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast;public class MainActivity extends Activity {private static final String TAG = "logmain";private Button button;private EditText name;private CheckBox soccer;private CheckBox basketball;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);name = (EditText) this.findViewById(R.id.editText);soccer = (CheckBox) this.findViewById(R.id.cbsoccer);basketball = (CheckBox) this.findViewById(R.id.cbbasketball);button = (Button) this.findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent i = new Intent(MainActivity.this, NextActivity.class);startActivity(i);}});//通過(guò)onCreate取值if (savedInstanceState != null) {String s = savedInstanceState.getString("name");boolean cbsoccer = savedInstanceState.getBoolean("soccer");boolean cbbasketball = savedInstanceState.getBoolean("basketball");//測(cè)試1/* name.setText("oncreatename");soccer.setChecked(true);basketball.setChecked(false);*///賦值1 name.setText(s);soccer.setChecked(cbsoccer);basketball.setChecked(cbbasketball);}Log.i(TAG, "---Main onCreate---");}@Overrideprotected void onStart() {super.onStart();Log.i(TAG, "---Main onStart---");}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {//調(diào)用activity的onRestoreInstanceState得到保存的值//如果賦值1注釋了 測(cè)試1開(kāi)放 再把 super.onRestoreInstanceState(savedInstanceState)和通過(guò)onRestoreInstanceState取值注釋//旋轉(zhuǎn)屏幕就是測(cè)試1的值super.onRestoreInstanceState(savedInstanceState);//通過(guò)onRestoreInstanceState取值/*if (savedInstanceState != null) {String s = savedInstanceState.getString("name");boolean cbsoccer = savedInstanceState.getBoolean("soccer");boolean cbbasketball = savedInstanceState.getBoolean("basketball");//測(cè)試2//name.setText("onrestorename");//soccer.setChecked(false);//basketball.setChecked(true);//賦值2name.setText(s);soccer.setChecked(cbsoccer);basketball.setChecked(cbbasketball);}*/Log.i(TAG, "---Main onRestoreInstanceState---");}@Overrideprotected void onResume() {super.onResume();Log.i(TAG, "---Main onResume---");}@Overrideprotected void onPause() {super.onPause();Log.i(TAG, "---Main onPause---");}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);//通過(guò)onSaveInstanceState存值outState.putString("name", name.getText().toString().trim());outState.putBoolean("soccer", soccer.isChecked());outState.putBoolean("basketball", basketball.isChecked());Log.i(TAG, "---Main onSaveInstanceState---");}@Overrideprotected void onStop() {super.onStop();Log.i(TAG, "---Main onStop---");}@Overrideprotected void onRestart() {super.onRestart();Log.i(TAG, "---Main onRestart---");}@Overrideprotected void onDestroy() {super.onDestroy();Log.i(TAG, "---Main onDestroy---");}}

?

布局:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.liang.activitydemo.MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textAppearance="?android:attr/textAppearanceMedium"android:text="Name:"android:id="@+id/tvok"android:layout_alignParentTop="true"android:layout_alignParentStart="true" /><EditTextandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:inputType="textPersonName"android:ems="10"android:id="@+id/editText"android:layout_alignParentTop="true"android:layout_toEndOf="@+id/tvok" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textAppearance="?android:attr/textAppearanceMedium"android:text="Hobby:"android:id="@+id/tvhobby"android:layout_below="@+id/editText"android:layout_alignParentStart="true" /><CheckBoxandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Soccer"android:id="@+id/cbsoccer"android:layout_below="@+id/editText"android:layout_toEndOf="@+id/tvhobby"android:checked="false" /><CheckBoxandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Basketball"android:id="@+id/cbbasketball"android:layout_below="@+id/editText"android:layout_toEndOf="@+id/cbsoccer"android:checked="false" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Next"android:id="@+id/button"android:layout_below="@+id/cbsoccer"android:layout_alignParentStart="true" /></RelativeLayout>

?

測(cè)試:注意順序

06-04 10:41:19.454 28735-28735/com.liang.activitydemo I/logmain: ---Main onPause---
06-04 10:41:19.454 28735-28735/com.liang.activitydemo I/logmain: ---Main onSaveInstanceState---(存值)
06-04 10:41:19.454 28735-28735/com.liang.activitydemo I/logmain: ---Main onStop---
06-04 10:41:19.454 28735-28735/com.liang.activitydemo I/logmain: ---Main onDestroy---
06-04 10:41:19.542 28735-28735/com.liang.activitydemo I/logmain: ---Main onCreate---(取值方法1)
06-04 10:41:19.542 28735-28735/com.liang.activitydemo I/logmain: ---Main onStart---
06-04 10:41:19.546 28735-28735/com.liang.activitydemo I/logmain: ---Main onRestoreInstanceState---(取值方法2)
06-04 10:41:19.546 28735-28735/com.liang.activitydemo I/logmain: ---Main onResume---

轉(zhuǎn)載于:https://www.cnblogs.com/manusas/p/5519644.html

總結(jié)

以上是生活随笔為你收集整理的1.4Activity保存现场状态的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。