Android 如何在屏幕切换的时候页面信息不被重置
来源:互联网 发布:部落冲突八本升级数据 编辑:程序博客网 时间:2024/05/04 00:02
当屏幕转动切换的时候 Android 机制是:销毁当前屏幕的 Activity ,然后重新开启一个新的适应屏幕改变的 Activity 。
那么,我们该如何在屏幕切换的时候页面信息不被重置呢?
解决实现:
1.在 AnroidMainifest.xml 的 activity 元素中加入:
android:configChanges="orientation|keyboardHidden"
或
android:configChanges="orientation|keyboard|keyboardHidden"
表示在改变屏幕方向、弹出软件盘和隐藏软键盘时,不再去执行 onCreate() 方法,
而是直接执行 onConfigurationChanged() 。
如果不申明此段代码,按照Activity的生命周期,都会去执行一次 onCreate() 方法,
而 onCreate() 方法通常会在显示之前做一些初始化工作。
所以如果改变屏幕方向这样的操作都去执行 onCreate() 方法,就有可能造成重复的初始化,
降低程序效率是必然的了,而且更有可能因为重复的初始化而导致数据的丢失。
这是需要避免的!
2.权限声明:
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"></uses-permission>
API 中说该权限允许我们改变配置信息,但是我们在改变屏幕方向的程序中却并没有用到该权限,是不是相互冲突了呢?
这里我们可以这样认为,当我们声明该权限的的时候,
系统允许我们通过重写 activity 中的 onConfigurationChanged 方法来捕获和修改某些配置信息。
3.在 Java 源代码文件中重写 Activity 中的 onConfigurationChanged 方法:
import android.content.res.Configuration;
// 框架回调函数 onConfigurationChanged 出自 android.content.res.Configuration 包。
// 参数 newConfig - 新设备的配备。
// 当设备配置信息有改动(比如屏幕方向的改变,实体键盘的推开或合上等)时,
// 并且如果此时有 Activity 正在运行,系统会调用这个函数。
// 注意:onConfigurationChanged 只会响应应用程序在 AnroidMainifest.xml 中
// 通过 android:configChanges="配置类型" 指定的配置类型的改动;
// 而对于其他配置的更改,则系统会先销毁当前屏幕的 Activity ,
// 然后重新开启一个新的适应屏幕改变的 Activity 实例。
public void
onConfigurationChanged( Configuration newConfig )
{
}
一、新建一个 Activity ,并把各个生命周期打印出来:
第一步:
运行 Activity ,得到如下信息:
onCreate
onStart
onResume
第二步:
按 crtl + f12 切换成横屏时:
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
第三步:
再按 crtl + f12 切换成竖屏时,发现打印了两次相同的信息:
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
第四步:
修改 AndroidManifest.xml 文件中的 Activity 元素,
添加 android:configChanges="orientation" ,
按 crtl + f12 切换成横屏时:(与上面无修改时相同)
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
第五步:
再按 crtl + f12 切换成竖屏时,
发现不会再打印相同信息,
但多打印了一行 onConfigChanged :
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
onConfigurationChanged
第六步:
修改 AndroidManifest.xml 文件中的 Activity 元素,
把 android:configChanges="orientation" 改成
android:configChanges="orientation|keyboardHidden",
按 crtl + f12 切换成横屏时,
就只打印 onConfigChanged :
onConfigurationChanged
第七步:
按 crtl + f12 切换成竖屏时:
onConfigurationChanged
onConfigurationChanged
二、总结:
1.不设置 AndroidManifest.xml 文件中的 Activity 元素的 android:configChanges 时,
2.设置了 AndroidManifest.xml 文件中的 Activity 元素的
3.设置了 AndroidManifest.xml 文件中的 Activity 元素的
三、补充一点:
1.当前 Activity 产生事件弹出 Toast 和 AlertDialog 的时候 Activity 的生命周期不会有改变!
2.Activity 运行时按下 home 键(跟被完全覆盖是一样的):
3.Activity 未被完全覆盖只是失去焦点:
0 0
- Android 如何在屏幕切换的时候页面信息不被重置
- Android 如何在屏幕切换的时候页面信息不被重置
- 如何在不切换 Activity的同时切换页面布局
- Android应用开发-- 如何在页面切换的过程中屏蔽屏幕事件?
- android 屏幕切换时候activity生命周期的变化
- Android屏幕页面的滑动切换和抽取父类
- Android 屏幕切换和onConfigurationChanged不调用的原因
- 如何在点击android中的EditText的时候不弹出软键盘
- Android 滑动切换页面 以及屏幕手势
- Android 滑动切换页面 以及屏幕手势
- Android 滑动切换页面 以及屏幕手势
- Android 滑动切换页面 以及屏幕手势
- Android 滑动切换页面 以及屏幕手势
- Android 滑动切换页面 以及屏幕手势
- Android 滑动切换页面 以及屏幕手势
- Android 滑动切换页面 以及屏幕手势
- Android 滑动切换页面 以及屏幕手势
- Android 滑动切换页面 以及屏幕手势
- 加油!请积极向上
- php 在centos7 apache中的安装配置
- Bootstrap之起筷页面的仿制。。。
- 用 python skimage做图像处理
- 坚持起来我自己都害怕,刻苦也很有味道
- Android 如何在屏幕切换的时候页面信息不被重置
- 编程入门导航
- Ubuntu 14.04下安装MySQL数据库
- C#运算符
- 1绿5红的顺序 把千纸鹤串起来那么第25只什么颜色第 36只是什么颜色
- NGUI与特效
- poj 3468 A Simple Problem with Integers(线段树+lazy)
- 自定义ProgressBar颜色样式
- Quartz小记(一):Elastic-Job - 分布式定时任务框架