当前位置:首页 > > 充电吧
[导读]起因:有一个需求,竖屏Activity A跳到横屏Activity B,B操作结束后finish然后返回A,A上面重建了,之前的操作比如listview添加了item都没有了测试条件:红米Note2一

起因:有一个需求,竖屏Activity A跳到横屏Activity B,B操作结束后finish然后返回A,A上面重建了,之前的操作比如listview添加了item都没有了

测试条件:红米Note2一部,华为一部

测试:1.华为测试机

                打日志发现,A跳到B时,A执行了一次onCreate,B操作结束后finish然后返回A,A又执行了一次onCreate,这就是为什么A的界面被重建了。

                为了阻止A反复执行onCreate,一般的做法是


首先要在配置Activity的时候进行如下的配置:另外需要重写Activity的onConfigurationChanged方法。实现方式如下,不需要做太多的内容:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {//横屏
        //你要执行的操作,可以不写

   } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){//竖屏
        //你要执行的操作,可以不写}
}


            这样写的目的是阻止Activity横竖屏切换时调用生命周期,比如onCreate

            但是经过我自己的尝试,发现并没有监听到onConfigurationChanged方法,后来发现一个外国友人的解释

Caution: Beginning with Android 3.2 (API level 13), the "screen size" also changes when the device switches between portrait and landscape orientation. Thus, if you want to prevent runtime restarts due to orientation change when developing for API level 13 or higher (as declared by the minSdkVersion and targetSdkVersion attributes), you must include the "screenSize" value in addition to the "orientation" value. That is, you must decalare android:configChanges="orientation|screenSize". However, if your application targets API level 12 or lower, then your activity always handles this configuration change itself (this configuration change does not restart your activity, even when running on an Android 3.2 or higher device).

         大体意思是:

         注意:在Android 3.2(API Level 13)开始,“screen size” 同时变化时的肖像和风景 取向之间的切换。因此,如果你想防止运行时重新启动,由于 方向改变时,开发API级别13或更高(如 宣布minSdkVersion和targetSdkVersion属性),你 必须包括“screen size的价值除了“定位” 价值。那就是,你必须decalare Android:configchanges =“orientation|screenSize”。然而,如果你的 应用目标API级别12或更低,那么你的活动总是 处理这种结构的变化本身(这种结构的变化 不重启你的活动,甚至在Android 3.2或更高的 装置运行时)。

 

         其实就是Android 3.2(API Level 13)开始,

android:configChanges="orientation|keyboardHidden"
    这句改成
android:configChanges="orientation|screenSize|keyboardHidden"

要多加一个

screenSize


          基本上这样就能阻止onCreate执行了,有兴趣的可以自己打日志看一下


    2.红米手机

    发现并没有出现这个问题,打了日志发现,红米手机里运行,A尽然没有切换横竖屏,这就是为什么没有问题的原因


总结,适配果然是一门大学问,一山还比一山高

            

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

其他电脑(比如安卓手机/平板电脑)的屏幕坏了,你可能想在安排维修之前紧急访问一些东西。你可以使用android的USB OTG功能(是的,几乎每个android都支持这个功能,你可以将鼠标和键盘连接到它)。

关键字: USB 鼠标 Android 树莓派

Google 宣布与中国 AR 科技公司 XREAL 达成深度战略合作,联合推出全球首款专为 Android XR 平台打造的旗舰级 AR 眼镜 Project Aura。

关键字: Google XREAL Android XR眼镜 AR

继停止维护AOSP开源项目后,谷歌母公司Alphabet近日被曝在其安卓系统(Android)、Pixel手机以及Chrome浏览器等部门裁员数百人。这一举措引发了业界的广泛关注,也引发了对谷歌未来业务布局的诸多猜测。

关键字: 谷歌 AOSP Android 裁员

在本教程中,我们将使用Capacitor 6、Angular和TypeScript构建一个Android应用程序,该应用程序通过串行端口连接到BleuIO USB加密狗。该应用程序允许用户直接从Android设备发送和接...

关键字: Android USB 电容器 BLE设备

早前媒体报道谷歌将停止维护Android开源项目(AOSP),将Android开发全面转向内部闭源分支,目前这一消息已经得到谷歌官方确认。

关键字: 谷歌 Android 开源

本项目演示了如何通过OTG (on - go) USB在Android设备上使用BleuIO USB加密狗作为串行端口。使用电容器6和@adeunis/电容器-串行插件,我们建立串行连接,发送AT命令,并实时读取响应。该...

关键字: 电容器 Android 传感器 微控制器 嵌入式系统

在Linux操作系统中,Android Debug Bridge(ADB)是一个功能强大的命令行工具,它允许开发者在计算机和Android设备之间建立通信,从而进行调试、管理、安装应用等操作。本文将详细介绍在Linux系...

关键字: Linux系统 Android Debug ADB

随着Android操作系统的进步,智能手机的使用日益增加。随后,有报道称,恶意个人和黑客利用 Android 提供的漏洞来访问用户珍视的数据。例如,此类威胁包括 2021 年针对 Android 设备发布的 Flubot...

关键字: Android 恶意软件

在本教程中,我们将构建超出电子领域的东西。作为一名电子工程师,我们大多数人都想为我们的物联网应用程序构建一些用户界面,在大多数情况下,Android应用程序将是用户与我们的物联网设备交互的正确选择。所以,如果你想为你的物...

关键字: 物联网 Android
关闭