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保存和恢复状态,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
- android中Activity详解(生命周期、以各种方式启动Activity、状态保存,完全退出等)
- Android保存Activity状态的方法
- Android 保存Fragment 切换状态实例代码
- Android中用onSaveInstanceState保存Fragment状态的方法
- 实例探究Android开发中Fragment状态的保存与恢复方法
- android初学者必须掌握的Activity状态的四大知识点(必读)
- Android编程实现隐藏状态栏及测试Activity是否活动的方法
- Android中检查、监听电量和充电状态的方法
- Android中监听软键盘显示状态实现代码
- Android编程实现状态保存的方法分析
相关文章
浅谈Android App开发中Fragment的创建与生命周期
这篇文章主要介绍了Android App开发中Fragment的创建与生命周期,文中详细地介绍了Fragment的概念以及一些常用的生命周期控制方法,需要的朋友可以参考下2016-02-02Android Activity与Fragment之间的跳转实例详解
这篇文章主要介绍了Android Activity与Fragment之间的跳转实例详解的相关资料,需要的朋友可以参考下2017-02-02
最新评论