android实现在横竖屏切换时页面信息不被重置的示例分享

2019-12-10 20:09:17王冬梅
易采站长站为您分析android实现在横竖屏切换时页面信息不被重置的示例,需要的朋友可以参考下    

当屏幕转动切换的时候 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 中