Android学习小结之Activity保存和恢复状态
程序员文章站
2024-03-06 09:18:43
android中启动一个activity如果点击home键该activity是不会被销毁的,但是当进行某些操作时某些数据就会丢失,如下:
java class:...
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保存和恢复状态,希望对大家有所帮助