您的位置:首页 > 移动开发 > Android开发

Android开发从入门到放弃(2)保存Activity的状态

2016-12-21 23:10 411 查看
移动设备的一个特点就是会经常在不同的APP之间切换,例如,你在使用一个APP的时候,有可能你会接到一个电话,或者点开了一个推送消息而跳转到了另一个APP,一段时间之后你会再次回到原来的APP,这时为了防止用户数据的丢失,你可能需要在用户离开APP时将有些东西保存起来,然后当用户回来后再把保存的数据恢复回来。本篇博客就会简单介绍一些如何保存Activity的状态。

首先,新建一个Android项目,在activity_main.xml中,将代码修改为

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
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"
android:orientation="vertical"
tools:context="com.example.zdk.statesaver.MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Count"
android:onClick="onClickCounter"/>
<TextView
android:id="@+id/textViewCounter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>


我添加了一个Button和一个TextView。下面是MainActivity.java的代码

public class MainActivity extends AppCompatActivity {

static final String KEY_COUNTER = "COUNTER";
private int mCounter=0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void onClickCounter(View view) {
mCounter++;
((TextView)findViewById(R.id.textViewCounter)).setText("Counter: " + Integer.toString(mCounter));
}
}


每次点击Button时,都会将一个计数器+1,并显示在TextView上。

运行上面的代码,运行的不错。但是,如果你旋转手机屏幕至横屏,你会发现,TextView不显示了,回到了最初的状态。其实,当APP进入横屏模式(landscape模式)时,Android系统会重新创建Activity,导致mCounter的值变为了0,TextView的文字也不见了。如何解决呢?

解决方法就是分别实现Activity的
onSaveInstanceState
方法和
onRestoreInstanceState
方法,前者用于保存状态,后者用于恢复状态。

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(KEY_COUNTER,mCounter);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mCounter=savedInstanceState.getInt(KEY_COUNTER);
((TextView)findViewById(R.id.textViewCounter)).setText(
"Counter: " + Integer.toString(mCounter));
}


然后运行APP,先点击几下Button,然后翻转屏幕至横屏,发现状态还保留着,同样,再回到竖屏时状态也保留着。

好,博客写到这里。祝你的Android开发之路从入门到放弃,不谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android activity state