目前为止,我们已经了解到了,当改变屏幕方向的时候,activity将会被销毁,随后被重建。请记住一点,当activity被重建之后,它的当前信息可能消失。当一个activity被kill掉,将会调以下方法中的一个或着两个:
- onPause() —— 当一个activity被kill掉或被转入后台的时候,这个方法总是被调用。
- onSaveInstanceState() —— 当一个activity将被kill掉或转入后台的时候,这个方法也会被掉用,就像onPause()方法一样。但是,当一个activity从调用栈中清除的时候(例如按返回键的时候),这个方法不会被调用(注:onPause()方法会被调用),因为已经没有必要保存它的状态了。
简而言之,想要保存activity的状态,那么总是要实现onPause()方法,然后使用你自己的方法去保存状态信息,例如使用数据库,外部或内部的存储。
如果你想简单地保存状态信息,当activity在重新创建的时候,从新加载这些信息。一个简单的方法就是实现onSaveInstanceState()这个方法,因为它提供了一个Bundle对象作为参数,这样,就可以使用这个Bundle对象去保存activity的信息。下面的代码将展示如何使用onSaveInstanceState()方法:
- @Override
- publicvoidonSaveInstanceState(BundleoutState){
- outState.putString("ID","1234567890");
- super.onSaveInstanceState(outState);
- }
当一个activity被重建,onCreate()方法会首先被调用,然后是onRestoreInstanceState()方法,就是这个方法能够取回刚刚通过onSaveInstanceState()方法保存的信息:
- @Override
- publicvoidonRestoreInstanceState(BundlesavedInstanceState){
- super.onRestoreInstanceState(savedInstanceState);
- StringID=savedInstanceState.getString("ID");
- }
尽管可以使用onSavaInstanceState()方法去保存状态信息,但这也有限制:只能通过Bundle对象去保存你的信息。如果你想保存更多的、更复杂的数据结构,这种方法就显得不太合适了。
可以使用的另外一种方法是使用onRetainNonConfigurationInstance()回调方法。当一个activity因为配置更改(例如屏幕方向的改变)而奖杯销毁的时候,Android系统将调用这个方法。可以这么使用:
- @Override
- publicObjectonRetainNonConfigurationInstance(){
- return("Sometexttopreserve");
- }
把你想保存的东西,通过这个方法返回出来。
可以观察到,这个方法返回一个Object对象,这就允许你返回任何数据类型。如果要提取保存的数据,可以在onCreate()方法中进行提取,使用getLastNonConfigurationInstance()回调方法:
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Log.d("StateInfo","onCreate");
- Stringstr=(String)getLastNonConfigurationInstance();
- }
onRetainNonConfigurationInstance()和getLastNonConfigurationInstance(),这两个方法可以允许你随时地保存信息。
例如,当用户下载数据的同时改变了屏幕方法,使用这两个方法去保存数据,总好过重新下载数据吧。
分享到:
相关推荐
小白式操作,使用 dockerfile 一键配置 nginx:1.12.0+php:7.2.28+mysql5.7,妈妈再也不用担心我装不来环境了
gradle-7.2-all.zip gradle-7.2-all.zip Android 开发工具 Android Studio 编译项目必备 Gradle 工具包。在 AS 上下载 Gradle 的速度实在是太慢了,导致项目一直无法编译,在此将下载出来的资源分享出来。
在Android开发中,Gradle是Android Studio的默认构建系统,对于项目的编译、打包、依赖管理等方面起着至关重要的作用。 标题"gradle-7.2-all.zip"表明这是Gradle 7.2版本的完整发行包,包含了所有必要的组件,如...
**标题解析:** "CentOS-7.2-x86_64-Minimal-1511.zip" 是一个压缩文件,其中包含了 CentOS 7.2 的最小化(x86_64)版本,发布代号为 1511。这个版本是专门为那些希望在服务器环境中运行轻量级操作系统的人设计的。 *...
### Android开发编程从入门到精通——Android程序员必备 #### 一、Android简介 **1.1 什么是Android** Android是一种基于Linux内核的操作系统,主要应用于移动设备如智能手机和平板电脑。它由谷歌公司领导的开放...
第1章 新一代的王者——android概览 1 1.1 智能手机市场现状 1 1.1.1 五大智能手机操作系统 1 1.1.2 智能手机市场的新星 2 1.2 android平台的特点及未来的趋势 3 1.2.1 全新理念带来的体验风暴 3 ...
《Gradle 7.2:构建自动化新纪元》 Gradle 7.2 是一个强大的构建自动化工具,它的发布标志着软件开发中的自动化构建过程迈入了新的阶段。Gradle 结合了灵活性、性能和广泛的生态系统支持,为开发者提供了一个高效且...
7.2 绘制几何图形——使用android.graphics类 7.3 手机屏幕保护程序——FadeIn/FadeOut特效与运行线程 7.4 用手指移动画面里的照片——onTouchEvent事件判断 7.5 加载存储卡的Gallery相簿——FileArrayList 7.6 取得...
7.2 绘制几何图形——使用android.graphics类 7.3 手机屏幕保护程序——FadeIn/FadeOut特效与运行线程 7.4 用手指移动画面里的照片——onTouchEvent事件判断 7.5 加载存储卡的Gallery相簿——FileArrayList 7.6 取得...
2.3 创建第一个Android项目——HeUoAndroid 2.3.1 创建HelloAndroid项目 2.3.2 运行HelloAndroid及模拟器的使用 2.3.3 调试HelloAndroid 2.4 小结 第二部分 基础篇 第3章 Android程序设计基础 3.1 Android程序框架 ...
**PHP 7.2 开发手册** PHP(PHP:Hypertext Preprocessor)是一种广泛使用的开源脚本语言,尤其在Web开发领域中占有重要地位。PHP 7.2是其第七个主要版本系列中的第二个次要发布,带来了许多性能提升、新特性和安全...
7.2 绘制几何图形——使用android.graphics类 7.3 手机屏幕保护程序——FadeIn/FadeOut特效与运行线程 7.4 用手指移动画面里的照片——onTouchEvent事件判断 7.5 加载存储卡的Gallery相簿——FileArrayList 7.6 取得...
【标题】:“七年级生物下册7.2细胞的分裂和分化课件苏科版.rar” 这个标题指示了我们即将探讨的主题是初中生物课程中关于细胞生物学的一个关键部分——细胞的分裂和分化,具体针对的是七年级下学期的课程内容。...
《Gradle 7.2:构建自动化新纪元》 Gradle是一款强大的、现代的、开源的构建自动化工具,尤其在Java生态系统中被广泛应用。它以其灵活的构建模型、强大的插件系统和高效的缓存机制著称。"gradle-7.2-bin.rar"这个...
- Gradle 插件生态系统丰富,有官方和社区开发的各种插件,如Java插件、Android插件等,可以轻松添加对不同项目的支持。 6. **并行构建**: - Gradle 支持并行执行任务,利用多核处理器加速构建过程。 7. **增量...
这是Android开发与应用,原书配套的课件,作者张荣,目录如下。 第1章 Android简介 1.1 手机操作系统 1.2 Android起源 1.3 Android特征 1.4 Android体系结构 1.4.1 应用层 1.4.2 应用框架层 1.4.3 ...
### 精通Android游戏开发知识点总结 #### 1. 欢迎进入Android游戏世界 ##### 1.1 必备技能 - **扎实的Android基础**:掌握Android SDK的使用、熟悉Android应用程序的基本结构及其生命周期管理。这部分内容包括...