• Android横竖屏切换总结


    之前在网上看到博客说Activity横竖屏切换的规律如下:

    (1)不设置android:configChanges,竖屏切换到横屏调用一次生命周期,横屏切竖屏调用两次生命周期。
    
     (2)设置 android:configChanges="orientation"时,切横屏时还会调用一次生命周期,切竖屏会调用一次生命周期,然后会调用OnConfigChanges()回调。
    
     (3)设置 Activity的android:configChanges="orientation|keyboardHidden" 时,不会执行各个生命周期,切横竖屏都只会执行onConfigurationChanged()。

    但是,我自己实验的结果却并不是这样子的。所以非常纳闷这是怎么回事。我实验的结果如下:

    首先我的测试环境:模拟器(2.3.3) 、真机LG(4.1.2)、三星(2.3.6)

    (1)在三种测试环境下,不配置android:configChanges,横竖屏切换都是调用一次Activity生命周期。
    
    (2)当设置android:configChanges="orientation"时:
    
        1.在三星测试环境下,横竖屏切换都是不执行生命周期而是执行onConfigurationChanged方法。
       2.在模拟器和LG上面测试,横竖屏切换和不设置android:configChanges是一样的效果。都执行一次生命周期。
    (3)当设置android:configChanges="orientation|keyboardHidden"时:
       1.在三星和模拟器上面测试,横竖屏切换都是不执行一遍生命周期,而是调用onConfigurationChanged()回调方法。
       2.在LG上面测试和不设置android:configChanges效果还是一样,横竖屏切换都各执行一次生命周期。

        所以跟网上说的情况不太一样,并且猜测跟系统版本还有关系:

         于是在网上查了下,自从Android 3.2(API 13),screen size也开始跟着设备的横竖切换而改变,因此需要在AndroidManifest.xml中配置android:configChanges="orientation|keyboardHidden|screenSize",经过验证,这个配置在LG上面起作用了,横竖屏切换的时候,只调用了OnConfigurationChanged()。

         另外在android4.2以后,需要在android:configChanges=""再配置上layoutDirection,才能起到回调OnConfigurationChanged()的效果。

         最后总结下,我得出的结论:

         (1)不设置android:configChanges的时候,横竖屏切换,无论什么版本的系统,都会调用Activity生命周期一次。  (这点不同于网上所说的 切换竖屏时的执行两次生命周期

         (2)设置android:configChanges="orientation"时,有的系统(3.0以前的系统)在横竖屏切换的时候,都会调用OnConfigurationChanged()方法。但是模拟器和4.0的系统都是会调用Activity生命周期一次。

         (3)设置android:configChanges="orientation|keyboardHidden"时,在android3.2以前(从android3.0到android4.0没有测试)的系统上,是只会调用OnConfigurationChanged()的。

         (4) 对于android4.0以上的系统,配置android:configChanges还需要加上screenSize才能达到调用OnConfigurationChanged()的效果。

             对于android4.2以上的系统,还需要配置layoutDirection,才可以达到调用OnConfigurationChanged()的效果。

      欢迎大家,留言相互交流。

  • 相关阅读:
    07 oracle 非归档模式 inactive/active/current redo log损坏的恢复
    07 归档模式 Active redo log丢失或损坏的恢复
    07 oracle 归档模式 inactive/current redo log损坏修复--以及错误ORA-00600: internal error code, arguments: [2663], [0], [9710724], [0], [9711142], [], [], [], [], [], [], []
    rac的一次问题 ORA-01565: error in identifying file '+DATA/bol/spfilebol.ora'
    44 答疑(三)--join的写法/Simple nested loop join的性能问题/Distinct和group by的性能/备库自增主键问题
    43 使用分区表
    5 centos 6.10 三节点安装apache hadoop 2.9.1
    java -jar参数携带问题
    解决Spring Boot集成Shiro,配置类使用Autowired无法注入Bean问题
    @Autowired注解与@Qualifier注解搭配使用----解决多实现选择注入问题
  • 原文地址:https://www.cnblogs.com/zhouliweiblog/p/3431450.html
Copyright © 2020-2023  润新知