android 程序屏幕旋转,蓝牙设备断开导致的MainActivity重新创建问题

本文详细介绍了如何在AndroidManifest.xml中设置android:configChanges属性,以处理屏幕方向、大小及键盘变化,避免不必要的活动重启,确保应用在不同设备上表现一致。
修改android程序中的AndroidManifext.xml中的android:configChange

orientation:屏幕方向改变
screenSize:屏幕大小改变
keyboard|keyboardHidden :键盘发生改变
navigation :导航发生改变

下面是官方的说明文档
https://developer.android.com/guide/topics/manifest/activity-element#config


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.a.b.efai">

    <uses-permission android:name="android.permission.CAMERA" />

    <uses-feature android:name="android.hardware.camera" /> <!-- <uses-feature android:name="android.hardware.camera.autofocus" /> -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/article"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
 
        <activity
            android:name=".MainActivity"
            android:configChanges="orientation|screenSize|navigation|keyboard|keyboardHidden"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

    </application>

</manifest>

 

### 3.1 屏幕旋转导致的Activity重建机制 在Android系统中,当设备发生屏幕旋转时,默认情况下系统会销毁当前的Activity实例,并创建一个新的Activity实例。这一过程包括重新调用`onCreate()`方法,以便加载与新设备配置相匹配的最佳资源[^1]。 这种行为虽然有助于自动适配不同的屏幕方向和尺寸,但在某些场景下可能会导致不必要的性能开销或数据丢失问题。例如,在一个正在进行网络请求的Activity中,如果因为屏幕旋转而被销毁并重新创建,可能导致重复请求或状态不一致的问题。 ### 3.2 控制Activity重建的方式 为了避免因屏幕旋转导致的Activity重建,开发者可以通过修改`AndroidManifest.xml`文件中的Activity声明来控制其行为。具体而言,可以在对应的`<activity>`标签中设置`android:configChanges`属性,以指定哪些配置变更不会触发Activity的重建。 常见的配置项包括: - `orientation`:用于处理屏幕方向的变化。 - `screenSize`:用于处理屏幕尺寸的变化(通常与横竖屏切换相关)。 - `screenLayout`:用于处理屏幕布局的变化。 - `keyboardHidden`:用于处理软键盘的显示或隐藏状态变化。 通过设置如下配置,可以避免屏幕旋转时Activity的重建: ```xml <activity android:name=".MainActivity" android:configChanges="orientation|screenSize|screenLayout|keyboardHidden" android:exported="true" /> ``` 在此配置下,系统不会销毁并重新创建Activity,而是直接调用`onConfigurationChanged()`方法,并将新的配置信息传递给该方法[^3]。 ### 3.3 自定义处理屏幕旋转事件 除了阻止Activity重建之外,开发者还可以通过重写`onConfigurationChanged()`方法来自定义处理屏幕旋转事件。这种方式适用于需要根据屏幕方向动态调整UI布局或资源的情况。 示例代码如下: ```java @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); // 检查当前屏幕方向 if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { // 处理横屏逻辑 } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { // 处理竖屏逻辑 } } ``` 通过这种方式,开发者可以在不重新创建Activity的前提下,动态更新界面元素或执行其他操作,从而提升用户体验和应用性能[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值