当前位置: 移动技术网 > IT编程>移动开发>Android > Android学习小结之Activity保存和恢复状态

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

魏焌皓,猫咪抱抱txt,盘鮈鱼

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保存和恢复状态,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网