上文已经说过屏幕旋转时的Activity的生命周期。
当数据量较大时,在屏幕旋转时,一般都采用两种方式避免Activity从新布局。
第一种:设置ScreenOrientation属性,通过属性设置可以避免在旋转时出现从新布局的情况:

如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的 AndroidManifest.xml中找到你所指定的Activity中加上android:screenOrientation属性,他有以下几个参数:

"unspecified"

默认值由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向. 
"landscape" 
      横屏显示(宽比高要长) 
"portrait" 
       竖屏显示(高比宽要长) 
"user" 
       用户当前首选的方向 
"behind" 
       和该Activity下面的那个Activity的方向一致(在Activity堆栈中的) 
"sensor" 
        有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换。 
"nosensor" 
         忽略物理感应器,这样就不会随着用户旋转设备而更改了 ( "unspecified"设置除外 )。

如:

<activity
            android:label="@string/app_name"
            android:name=".ActivityLifeTestActivity"
            android:screenOrientation="landscape" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

同样也可以在应用程序中使用 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)方法来控制屏幕的方向。

通过该种方法,Activity的生命周期依然正常,当前的Activty依然会被killed然后从新建立。

第二种:配置 android:configChanges属性

如果不需要从新载入,可以在androidmanifest.xml中加入配置 android:configChanges="orientation",配置android:configChanges的作用就是如文档所说的:Specify one or more configuration changes that the activity will handle itself. If not specified, the activity will be restarted if any of these configuration changes happen in the system。这样在程序中. Activity就不会重复的调用onCreate()甚至不会调用onPause.onResume.只会调用一个 onConfigurationChanged(Configuration newConfig)。

如果我在android:configChanges中只设置orientation,他依然会重新加载,只有设置了 orientation|keyboardHidden它才会只调用一个onConfigurationChanged(Configuration newConfig)

如果需要重新载入,则不需要做任何修改。不过如果需要在重新载入过程中保存之前的操作内容或数据,则需要保存之前的数据。然后在activity的 onCreate()中取出来。当然,如此就不能设置android:configChanges()了,否则就不会调用onCreate()方法。

没有设置android:configChanges,切换屏幕时会是onPause,onStop,onDestroy,然后onCreate,onStart,onResume,也就是先停掉,然后再从onCreate开始

设置android:configChanges后,只进入

@Override
public void onConfigurationChanged(Configuration config) {
        super.onConfigurationChanged(config);
        if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
            Log.i(TAG, "横屏");
        } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
            Log.i(TAG, "竖屏");
        }

}

通过上诉两种方法,基本上完成了屏幕切换时所需要的知识

转自:http://blog.sina.com.cn/s/blog_9f233c0701012rdt.html

android 屏幕旋转控制相关推荐

  1. 计算Android屏幕解锁组合数

    计算Android屏幕解锁组合数 晚饭时和同事聊到安卓屏幕解锁时会有多少种解锁方案,觉得很有趣,吃完饭开始想办法解题,花了大概2个小时解决.思路如下: 使用索引值0-9表示从左到右.从上到下的9个点, ...

  2. android屏幕适配的目的,Android 不同分辨率下屏幕适配的实战方案与经验总结

    Android 开发中,屏幕适配是一大考点,几乎每一场面试,都不会落下这个问题,这个问题说简单也简单,说难也难,当然对于有过真实的适配经验的人来说,这个根本不算什么问题,从坑里爬过的人,自然知道这其中 ...

  3. 鸿洋android屏幕适配四部曲-传送门

    鸿洋android屏幕适配四部曲-传送门 两分钟理解Android中PX.DP.SP的区别 https://blog.csdn.net/donkor_/article/details/77680042 ...

  4. 【Android应用开发】分享一个录制 Android 屏幕 gif 格式的小技巧

    因为写博客总是需要录制 Android 软件的演示效果, 研究了将近一小时找到了合适的工具; 录制流程 : -- 1. 录制 Android 手机屏幕内容 : 使用 拍大师 软件录制 Android ...

  5. Android 屏幕适配

    一.适配方式之dp 名词解释 分辨率:480*800,1280*720.表示物理屏幕区域内像素点的总和.(切记:跟屏幕适配没有任何关系) 因为我们既可以把1280*720 的分辨率做到4.0 的手机上 ...

  6. Android屏幕方向调整的两种方式

    Android屏幕方向调整 作者:坚果 公众号:"大前端之旅" 华为云享专家,InfoQ签约作者,阿里云专家博主,51CTO博客首席体验官,开源项目GVA成员之一,专注于大前端技术 ...

  7. android屏幕适配详解

    android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要 ...

  8. android设置布局高度自适应,4种Android屏幕自适应解决方案

    Android支持多屏幕机制即用为当前设备屏幕提供一种合适的方式来共同管理并解析应用资源.本文就介绍了4中Android屏幕自适应解决方案. 一.细说layout_weight 目前最为推荐的Andr ...

  9. Android屏幕适配全攻略(最权威的官方适配指导)(转),共大家分享。

    Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...

最新文章

  1. React 组件之间 事件调用(父组件调用子组件)
  2. 8636 跳格子(dfs+记忆化搜索)
  3. 评价指标:目标检测的评价指标 - mAP
  4. 如何解决类模板的分离编译问题?
  5. 2017.4.23loli测试
  6. 计算机网络class5(分层结构、协议、接口、服务)
  7. 谈一谈python中的魔法变量*args和**kwargs
  8. python 多行缩进_【python cookbook】改变多行文本字符串的缩进
  9. js获取浏览器信息及版本(兼容IE)
  10. oscam android 编译,折腾OSCAM之二-打包成ipk安装包 - OPENWRT专版 - 恩山无线论坛 - Powered by Discuz!...
  11. POSTING_INTERFACE_DOCUMENT解决特别总账'W'类型的过账问题
  12. 2021年电赛F题智能送药小车(国二)开源分享
  13. BAT公司职级体系及薪水解密
  14. Windows 10 安装虚拟专用网client端
  15. 计算机硬件性能测试过程,鲁大师怎么检测电脑硬件性能 鲁大师测试硬件方法...
  16. MAC下用F9-F12模拟PageUP/PageDown/HOME/END
  17. PCB电路板元件目标检测数据集(YOLO标签,1400张,9类目标)
  18. Flash Timeout.Reset the Target and try it again 报错解决方案 STM32 ST-LINK Utility下载程序操作
  19. iOS-苹果开发者账号申请之通过及购买
  20. UniAPP 安卓应用版本自动更新及下载安装

热门文章

  1. 【Spring Cloud Alibaba】(五)Dubbo启动报错?一直重连报错?你值得学习的是排查问题的方法
  2. 10_单点登录SSO
  3. c语言变量标识符,C语言简单记-标识符,注释,数据类型,变量
  4. TensorFlow 2.0 beta版本来了!
  5. 小程序客服六大痛点总结!(附解决方案)
  6. 介绍一下labview
  7. P1383 高级打字机 *
  8. iOS开发键盘表情处理
  9. CISSP考试大纲将在2021年5月1日更新
  10. 三角形数----Acwing 110周赛