1.Demo说明与演示
该Demo演示onSaveInstanceState(BundlesavedBundle) 来保持UI状态
效果如下图
2.视频讲解
http://www.eyeandroid.com/thread-10735-1-1.html
3.Demo分析
本例是通过onSaveInstanceState(Bundle savedBundle) 来实现保持UI状态。 和onPause,onResume不同的是,onSaveInstanceState不是Activity Life cycle的一部分,也不一定会在Activity 被destroyed前执行,比如说用户按“Back”按键回退到前一个Activity时,当前的Activity并不会调用onSaveInstanceState方法,因为这时是用户指明想关闭当前Activity,而onPause一定会执行,因为onPause 是Activity生命周期的一个状态。如果onSaveInstanceState被调用的话,它一定会在onStop之前调用,有时会在onPause之前调用。
onSaveInstanceState设计在当Activity destroy之前调用(如当Android切换到其它应用,此时Android根据系统资源的分配情况,用可能会将在后台运行的Activity清除,或是系统配置改变,比如屏幕从纵向放平,当前的Activity会先被Destory,然后根据当前配置重新创建当前Activity的实例。此时Activity的onSaveInstanceState会在Activity Destroy之前调用,此时应在onSaveInstanceState将一些UI状态临时存储中Bundle中。然后Android系统会重新执行Activity的onCreate方法,传入参数为Bundle对象。如果在onSaveInstanceState设置了,这个Bundle对象即是之前保存的Bundle对象,应用可以在onCreate 或是onRestoreInstanceState(Bundle savedInstanceState) 恢复UI状态,这样可以做到在应用或是Activity重启时能保持上此退出时的状态。
但是看看SaveRestoreState.java中似乎没有任何与Save /Restore State 相关的代码,方法getSavedText和setSavedText和本例无关。
这是因为Activity的缺省onSaveInstanceState实现完成了对UI状态的Save和Restore。例子中上面的EditText输入在Activity重启时会恢复,而下面的EditText输入不会被保存和恢复。Activity的缺省onSaveInstanceState实现只会对定义了ID(android:id)的View实现Save 和Restore.来看看R.layout.save_restore_state中的定义:
<EditText android:id=”@+id/saved”
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:layout_weight=”1″
android:background=”@drawable/green”
android:text=”@string/initial_text”
android:freezesText=”true”>
<requestFocus />
< /EditText>
….
<EditText
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:layout_weight=”1″
android:background=”@drawable/red”
android:text=”@string/initial_text”>
< /EditText>
上面的EditText定义了ID而下面的EditText没有定义ID。这可以通过旋转屏幕来测试。旋转屏幕可以保证当前activity先被Destory然后再Create:在上下EditText输入值,然后旋转屏幕,可以看到只有上面的EditText值被保留。
注:在Emulator上,可以先按下“NumLock”,然后按7,9来旋转屏幕。
4.这个Demo我们学会了
onSaveInstanceState和onRestoreInstanceState触发的时机
http://www.eyeandroid.com/thread-10637-1-1.html
- 大小: 115.3 KB
分享到:
相关推荐
"android4.4samples"是一个包含了Android 4.4(KitKat)SDK中的示例代码集合,它为开发者提供了一个深入学习Android API的平台。这些示例代码涵盖了各种功能和组件的使用方法,帮助开发者更好地理解和应用Android...
vuforia-samples-advanced-android-ios-unity-4-2-3.zip官网下载太慢了,放在网盘方便大家下载
andorid L\adt-bundle-windows-x86_64-20140624\sdk\samples\android-L\legacy\ApiDemos 最新的androidl 的apidemos
vuforia-samples-core-android-ios-unity-4-2-3.zip官网400M下载太慢了,传到百度云盘,方便大家下载,一分意思一下!
总结,ArcGIS Runtime SDK for Android为开发者提供了构建强大GIS应用的途径,"arcgis-runtime-samples-android-master"则是学习和掌握这个工具的宝贵资源。通过深入研究和实践,开发者可以创建出具有专业GIS功能的...
这个“arcgis-runtime-samples-android-100.4-master.zip”压缩包包含了一系列100.5版本的示例代码,旨在帮助开发者快速理解和掌握ArcGIS Runtime for Android的开发技术。 1. **ArcGIS Runtime SDK介绍** ArcGIS ...
这个"vuforia-samples-core-android-7-2-21.zip"压缩包包含了Vuforia的最新版本7.2.21的Android示例项目,旨在帮助开发者理解和实践Vuforia的各项功能。以下是对这些关键知识点的详细介绍: 1. **Vuforia SDK**: ...
使用Unity2019.4打包的Vuforia Core Samples.apk ; vuforia-samples-unity-9-8-11.apk
在"Azure-Samples-azure-sdk-for-go-samples-master"目录下,你可以找到多个子目录,每个子目录代表一个特定的示例场景。这些示例涵盖了Azure服务的广泛应用,包括但不限于: 1. **虚拟机管理**:如何创建、启动、...
这个“vuforia-samples-advanced-android-7-1-34”压缩包包含了多个用于Android平台的高级Unity示例项目,帮助开发者深入了解Vuforia的功能和用法。 首先,我们来看看每个子文件的含义: 1. **VideoPlayback-7-1-...
"vuforia-samples-core-android-8-6-10_0.zip"是一个包含Vuforia SDK 8.6.10版本的核心Android示例项目的压缩包。这个压缩包特别适用于开发者,尤其是那些在2020年2月期间遇到官方下载困难的情况,因为当时可能由于...
最后,Android 23的samples还包括了如何利用最新的API与设备硬件交互,如蓝牙、GPS、传感器等。这可以帮助开发者更好地利用手机的各种功能,开发出更具创新性的应用。 总的来说,“android-samples.zip”这个压缩包...
原始资源太大,381M,放在网盘里供下载。官网下载太慢,只有十几KB的速度
标题中的“Android 自带Samples”指的是Android SDK中包含的一系列示例项目,这些项目展示了如何使用Android API来实现特定功能或交互。 描述中提到的"ApiDemos"是Android Samples中最为经典的一个,它几乎包含了...
"spring-android-samples-master"目录下的源代码包含了一系列示例应用,覆盖了上述所有功能点。通过这些案例,开发者可以了解如何在实际项目中应用Spring for Android,例如创建一个HTTP客户端,处理不同类型的HTTP...
spring-android-samples-master
《MiniGUI开发示例库详解——mg-samples-1.6.0》 MiniGUI,全称微型图形用户界面,是一种轻量级的图形系统,主要用于嵌入式设备和资源有限的计算机上,提供图形用户界面的支持。它以其小巧、高效、易用的特点在...
Android官方提供的`architecture-samples-todo-mvp`示例项目旨在帮助开发者理解和实践MVP架构。 **1. MVP架构的组成部分** - **Model(模型层)**:模型层主要负责与数据相关的操作,包括数据的获取、存储和处理。...