ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android 如何保存Android 运行时状态

2020-09-16 20:00:29  阅读:215  来源: 互联网

标签:保存 Bundle savedInstanceState onRestoreInstanceState Android onSaveInstanceState 


Android 如何保存Android 运行时状态

使用 SaveInstanceState去保存运行时数据

  • 首先,我们需要重写一下系统的public void onSaveInstanceState(Bundle savedInstanceState)方法
  • 并在onSaveInstanceState方法中添加需要保存的数据。
  • 最后我们可以在onRestoreInstanceState方法中进行数据读取。

如何进行运行时状态的保存

上面我们说到,我们可以使用onSaveInstanceState去进行数据保存。

/**
 * 保存实例状态
 * @param savedInstanceState
 */
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    savedInstanceState.putInt("ID", 1);
    super.onSaveInstanceState(savedInstanceState);
}

可以注意到这里用来存储运行时状态的数据的是一个Bundle如果你对它有过了解,那么我们都知道它是一个键值对类型的。所以我们的保存数据的语句就是:

savedInstanceState.putInt("ID", 1);

注意在存入数据后我们还需要调用超类的方法,来完成保存。

如何恢复数据

如何去恢复我们刚刚保存的数据。这个时候我们就需要去覆盖写一个onRestoreInstanceState(Bundle savedInstanceState)呢。

/**
 * 恢复实例状态
 * @param savedInstanceState
 */
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    if (savedInstanceState != null) {
        Toast.makeText(this, "Welcome back.", Toast.LENGTH_SHORT).show();
        int id= savedInstanceState.getInt("ID");
        System.out.println(id);
    } else {
        Toast.makeText(this, "Welcome to HelloAndroid!", Toast.LENGTH_SHORT).show();
    }
    super.onRestoreInstanceState(savedInstanceState);
}

上面就是我们用来恢复运行时状态的相关代码呢。这里其实没啥,主要就是我们重写呢onRestoreInstanceState方法来完成操作。

恢复流程如下。

首先,在onRestoreInstanceState方法中,我们需要去判断一下当前的Bundle是否为空。如果不为空我们就需要进行数据获取操作呢。添加为空判断是为了空指针所导致的相关异常。

int id = savedInstanceState.getInt("ID");

这样,我们的获取操作就完成了,需要注意的是在获取一些数据的时候我们需要进行为空判断,但是这个无法避免取出来的值不为空,所以如果需要使用这些数据请进行异常处理,或者是相关的为空判断。

到这里,我们Android 保存和恢复实例状态的操作就基本完成了。

学习自:Stack Overflow

标签:保存,Bundle,savedInstanceState,onRestoreInstanceState,Android,onSaveInstanceState,
来源: https://www.cnblogs.com/cao-1/p/13681063.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有