Android学习小结之Activity保存和恢复状态

Android中启动一个Activity如果点击Home键该Activity是不会被销毁的,但是当进行某些操作时某些数据就会丢失,如下:

Java class:

package com.king.activitytest2;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private EditText editText;
private Button buttonSet,buttonRead;
//定义一个常量
double pai;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取控件
editText=(EditText)findViewById(R.id.edit1);
buttonSet=(Button) findViewById(R.id.btn_Set);
buttonRead=(Button) findViewById(R.id.btn_Read);
//设置监听事件
buttonSet.setOnClickListener(this);
buttonRead.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btn_Set:
editText.setText("圆周率为:");
pai=3.141592654;
break;
case R.id.btn_Read:
String str=editText.getText().toString()+pai;
Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
break;
}
}
}

xml布局文件:

<?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"
tools:context="com.king.activitytest2.MainActivity">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edit1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置"
android:id="@+id/btn_Set"
android:layout_marginTop="46dp"
android:layout_below="@+id/edit1"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="35dp"
android:layout_marginStart="35dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="读取"
android:id="@+id/btn_Read"
android:layout_alignTop="@+id/btn_Set"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="46dp"
android:layout_marginEnd="46dp"
/>
</RelativeLayout>

这里在程序中定义了一个double类型的变量,当我们点击读取按钮时会将该变量的值加在后面并显示,打开程序然后进行操作,一切正常:

我们点击设置之后将屏幕横过来,咦,pai跑哪去了?

其实这里当我们进行横竖屏切换时,迫于系统机制,该Activity已经被销毁了。但是为什么这个页面还存在呢,这是因为这个销毁并不是用户去主动退出,所以Android系统实现了这些状态的保存功能,但是一些数据达不到被保留的要求,并没有被保留,就像程序中可怜的pai就被抛弃了!

那我们需要在像这种横竖屏切换过程中保留数据该如何做呢,这里我们就需要重写onSaveInstanceState()方法:

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//将需要保存的数据放入Bundle中
outState.putDouble("pai",pai);
}

保存解决了,那我们如何取出呢?很简单,只需要在onCreate()方法中判断其参数是否为null,不为null便将其取出。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//将pai保存
if(savedInstanceState!=null)
pai=savedInstanceState.getDouble("pai");
}

现在我们可以看到屏幕切换之后pai也没有被销毁。

以上所述是小编给大家介绍的Activity保存和恢复状态,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!

声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。