Activity的onSaveInstanceState()方法

本文介绍如何通过重写onSaveInstanceState方法来保存Activity中的临时数据,避免因系统回收而导致用户输入的数据丢失,提高用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在手机内存不足时系统会回收掉不在栈顶位置的app,比如你正在app中编辑一堆信息这个时候你接到一个电话或者切换到其他应用当中去,这个时候你的app就存在被系统回收的可能,这个时候要是没有什么保护措施的话,那你的app将给用户带来极差的体验。试想作为一个用户当你发现你填写了一堆信息就因为你去接了一电话信息没了,你当作和感想。

    这个时候我们就需要用到Activity的onSaveInstanceState()方法了,它不是生命周期方法,它不同于生命周期方法,它并不会一定会被触发,它只有具备以下条件的时候才会触发:

  • 当按下HOME键的时
  • 长按HOME键,选择运行程序的时
  • 按下电源(关闭屏幕显示)时
  • 从Activity中启动其他Activity时
  • 屏幕方向切换时(例如从竖屏切换到横屏时)

onSaveInstanceState()方法携带了一个Bundle类型参数提供了一系列方法用于保存数据,。

下面以按下HOME进入菜单,模拟系统回收Activity为例:

重写onSaveInstanceState()方法代码保存相关信息

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.d(TAG,"我正在被销毁,我保存了一些临时数据");
        String tempData="Something you just typed";
        outState.putString("data_key",tempData);
    }

在onCreate()中恢复保存的信息

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
        Log.d(TAG,"onCreate----正在创建活动");
        if (savedInstanceState!=null){
            String tempDate=savedInstanceState.getString("data_key");
            Log.d(TAG,tempDate);
        }
    }


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值