活动回收

活动被回收数据的处理

当一个活动进入停止状态的时候,是有可能被系统回收的,

比如活动A 进入到活动B 这个时候活动A是停止状态 如果因为内存不足,系统将活动A回收掉了,然后用户按back键返回活动A

这个时候,还是会正常显示活动A,只不过这是并不会执行onRestart 而是onCreate 活动A被重新创建。

如果活动A由临时数据,比如有一个文本框,你输入了一段文字。如果被回收的话,则刚才输入的文字就全没了。

如果我们的程序出现这情况 是会影响用户体验的。

好在activity提供一个onSaveInstanceState回调方法。这个方法保证在活动被回收之前一定会被调用。

因此可以解决回收后的临时数据的问题。

onSaveInstanceState方法会携带一个Bundle类型的参数。

Bundle 提供一系列用于保存数据的方法。比如putString 保存字符串

putInt保存整数。

重写onSaveInstanceState方法

@Override
protected void onSaveInstanceState(Bundle outState) { //该方法是当前活动被回收前调用
    super.onSaveInstanceState(outState);
    outState.putString("user_name","潘小姐");
}Code language: JavaScript (javascript)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.e(TAG, "onCreate: ");

    if (savedInstanceState!=null)//在onCrearte里面 我们可以判断bundle有没有数据 有则是被回收过 当前是重新创建
    {
        Log.e(TAG, savedInstanceState.getString("user_name"));
    }Code language: JavaScript (javascript)

再次创建的时候获取Bundle数据

我们在onCreate方法中系统会传入一个Bundle参数

protected void onCreate(Bundle savedInstanceState) {Code language: JavaScript (javascript)

获取Bundle数据

if (savedInstanceState!=null)//在onCrearte里面 我们可以判断bundle有没有数据 有则是被回收过 当前是重新创建
{
    Log.e(TAG, savedInstanceState.getString("user_name"));
}Code language: JavaScript (javascript)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注