美文网首页Android青年大学习
Android学习之 Activity的意外销毁重建

Android学习之 Activity的意外销毁重建

作者: _汉堡_ | 来源:发表于2023-12-05 14:53 被阅读0次

    问题:savedInstanceState 是什么 怎么用

    先说答案:
    saveInstanceState 是一个 Bundle 对象,它提供了一种在 Activity 实例被意外销毁和重建时保存和恢复 Activity 状态的方式。

    使用 savedInstanceState 的场景:

    屏幕方向改变:
    当设备旋转时,Activity默认会被销毁并重建,savedInstanceState可以保存数据,然后在新实例中恢复。
    内存回收:
    系统为了回收资源可能会销毁后台Activity,savedInstanceState用于这种情况下保存状态。
    多窗口模式:
    当用户在多窗口模式下调整Activity大小,可能会触发重新创建Activity。

    怎么实现状态保存和恢复:
    保存状态
    重写 onSaveInstanceState(Bundle outState) 方法,将需要保存的状态信息以键值对形式放入 Bundle 中。
    @Override

    protected void onSaveInstanceState(Bundle outState) {

        super.onSaveInstanceState(outState);

        // 保存用户的当前状态

        outState.putInt("SCORE", currentScore);

        outState.putString("PLAYER_NAME", playerName);

    }

    恢复状态
    在 onCreate(Bundle savedInstanceState) 或 onRestoreInstanceState(Bundle savedInstanceState) 中恢复状态。
    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        //检查我们是否正在重新创建以前销毁的实例

        if (savedInstanceState != null) {

            // 从保存的状态恢复成员的值

            currentScore = savedInstanceState.getInt("SCORE");

            playerName = savedInstanceState.getString("PLAYER_NAME");

        } else {

            // 可能使用新实例的默认值初始化成员

        }

    }

    注意点:
    只有在 Activity 被系统销毁并重建的情况下,savedInstanceState 才会非空。用户主动退出 Activity 时,例如按下返回键,通常不会调用 onSaveInstanceState,因为此时认为用户可能不需要恢复之前的状态。

    savedInstanceState 不适用于持久化数据,它更适合用于短暂保存界面状态。对于需要长期保存的数据,应使用文件存储、SharedPreferences 或数据库等方式。

    大量数据不宜存入 savedInstanceState,因为 Bundle 容量有限,存入过多数据可能会导致 TransactionTooLargeException 异常。对于大量数据的保存,应该考虑其他持久化存储方案。

    相关文章

      网友评论

        本文标题:Android学习之 Activity的意外销毁重建

        本文链接:https://www.haomeiwen.com/subject/yekrgdtx.html