Android开发Android开发Android技术知识

Carson带你学Android:该如何保存 & 恢复Activ

2021-03-23  本文已影响0人  Carson带你学安卓

背景


阅读本文可了解

  1. Activity如何保存临时数据 & 状态
  2. Activity如何恢复临时数据 & 状态

Activity如何保存临时数据 & 状态

1. 核心方法

onSaveInstanceState()

2. 调用时机

当系统 未经你许可 时,可能 销毁了你的Activity,则会被系统调用 。

特别说明:

3. 具体调用场景

假定为Activity A显示在当前Activity栈的最上层时,以下情况会执行onSaveInstanceState()

注:系统不知道你切换到其他地方后要运行多少其他的程序,自然也不知Activity A是否会被销毁,故系统会调用onSaveInstanceState(),下面所说的所有情况该遵循这原则

4. 使用说明

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {

// 通过Bundle参数以键值对的方式进行数据的存储
// 数据恢复:onRestoreInstanceState() & onCreate()
// 上述二者都有一个Bundle类型的参数用于恢复数据
        savedInstanceState.putBoolean("MyBoolean", true);
        savedInstanceState.putDouble("myDouble", 1.9);
        savedInstanceState.putInt("MyInt", 1);
        savedInstanceState.putString("MyString", "Welcome back to Android");
        // ...
        super.onSaveInstanceState(savedInstanceState);
}

补充说明:


Activity如何恢复临时数据 & 状态

1. 核心方法

onRestoreInstanceState()

2. 调用时机

当系统“未经你许可”时,确实销毁了你的Activity,则重新启动时会被系统调用

特别说明:

3. 具体调用场景

若 异常关闭了Activity,即调用了onSaveInstanceState() & 下次启动时会调用onRestoreInstanceState()

注:此时结合Activity的生命周期的调用顺序是:

  1. onCreate()
  2. onStart()
  3. onRestoreInstanceState()
  4. onResume()

4. 使用示例

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);

        boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
        double myDouble = savedInstanceState.getDouble("myDouble");
        int myInt = savedInstanceState.getInt("MyInt");
        String myString = savedInstanceState.getString("MyString");
}

如:当正在显示Activity A时,用户按下HOME键回到主界面,然后用户紧接着又返回到Activity A,此时Activity A一般不会因为内存的原因被系统销毁,故Activity A的onRestoreInstanceState()不会被执行

至此,关于Activity的临时数据 & 状态 保存 & 恢复,讲解完毕。Carson带你学四大组件文章系列:

Carson带你学Android:页面活动-Activity
Carson带你学Android:广播-BroadcastReceiver
Carson带你学Android:服务-Service
Carson带你学Android:内存承载器-ContentProvider


欢迎关注Carson_Ho的简书

不定期分享关于安卓开发的干货,追求短、平、快,但却不缺深度


请点赞!因为你的鼓励是我写作的最大动力!

上一篇 下一篇

猜你喜欢

热点阅读