当屏幕方向改变时,Android应用程序会重新启动活动吗?

4

我有一个应用程序,其中使用了横向和纵向模式。我在每个活动中都使用了android:configChanges="orientation|keyboardHidden"。所以当我在2.3设备上运行它时,完全正常工作,活动不会重新启动。但是当我在Android 4.0及以上版本中打开相同的应用程序时,每次改变方向时活动都会重新启动。以下是我的XML文件。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.iconnect.collaborator"
    android:versionCode="1"
    android:versionName="1.0" >


    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <supports-screens android:largeScreens="true"
        android:normalScreens="true" android:smallScreens="true"
        android:anyDensity="true" />
    <supports-screens android:smallScreens="true" />
    <supports-screens android:normalScreens="true" />
    <supports-screens android:largeScreens="true" />


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


    <application

        android:icon="@drawable/cnlogomini"
        android:label="CollaborateNow"
        android:largeHeap="true"
      android:allowBackup="true"
        android:theme="@style/AppTheme" >
        <activity android:name="jim.h.common.android.zxinglib.CaptureActivity"
            android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            android:windowSoftInputMode="stateAlwaysHidden" />
        <activity android:name=".Register"
          android:configChanges="orientation|keyboardHidden" ></activity>
        <activity android:name=".ppllogincopy"

           android:configChanges="orientation|keyboardHidden"></activity>

<activity android:name=".Password"

           android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name=".Camerascan"

           android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name=".TabGroup1Activity"

            android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name=".newtab"

            android:configChanges="orientation|keyboardHidden"></activity>
         <activity android:name=".SubmitData"

            android:configChanges="orientation|keyboardHidden"></activity>
         <activity android:name=".peoplelist"

         android:configChanges="orientation|keyboardHidden"></activity>
         <activity android:name=".GenerateQrcode"

        android:configChanges="orientation|keyboardHidden"></activity>
         <activity android:name=".contact"

           android:configChanges="orientation|keyboardHidden"></activity>
         <activity android:name=".peoplelistlogin"

          android:configChanges="orientation|keyboardHidden"></activity>
         <activity android:name=".Startnew"
             android:configChanges="orientation|keyboardHidden"

            ></activity>
          <activity android:name=".projectdetails"

           android:configChanges="orientation|keyboardHidden"></activity>
           <activity android:name=".Signup"

            android:configChanges="orientation|keyboardHidden"></activity>
          <activity android:name=".RegisterScan"

            android:configChanges="orientation|keyboardHidden"></activity>
          <activity android:name=".peoplelistscan"

           android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name=".Profile"

            android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name=".List"

            android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name=".Logout"

           android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name=".scanRegister"

            android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name=".scanList"

            android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name="scanCamera"

            android:configChanges="orientation|keyboardHidden"></activity>
        <activity android:name="com.iconnect.collaborator.Camera"

         android:configChanges="orientation|keyboardHidden"></activity>
       <activity android:name=".collaborations"

           android:configChanges="orientation|keyboardHidden"></activity>


        <activity
            android:name="com.iconnect.collaborator.MainActivity"


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

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

</manifest>

您是否想要阻止屏幕方向更改? - Akhil Jain
已经回答过多次了。你应该保存你的状态并进行恢复。 - m0skit0
不,我想要横向和纵向两种模式,但在4.0及以上版本中,当屏幕方向改变时,活动会重新启动,但在2.3上不会重新启动。 - user2699728
2个回答

12

如果您的 android:targetSdkVersion="12" 或更低

android:configChanges="orientation|keyboardHidden"

如果您的 android:targetSdkVersion="13" 或更高

android:configChanges="orientation|keyboardHidden|screenSize"

来自developer.android的引用:

注意:从Android 3.2(API级别13)开始,当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。因此,如果您想要避免针对API级别13或更高版本(由minSdkVersion和targetSdkVersion属性声明)进行开发时由于方向更改而导致运行时重新启动,则必须除“方向”值外还包括“screenSize”值。也就是说,必须声明android:configChanges="orientation|screenSize"。但是,如果您的应用程序针对API级别12或更低级别,则您的Activity始终会自己处理此配置更改(即使在运行于Android 3.2或更高版本设备上时,此配置更改也不会重新启动您的Activity)。

来源:处理方向更改


0

你还需要添加screenSize。

“当前可用的屏幕尺寸已更改。这表示相对于当前纵横比可用尺寸的变化,因此当用户在横向和纵向之间切换时会发生变化。但是,如果您的应用程序针对API级别12或更低版本,则您的活动始终会自行处理此配置更改(即使在运行Android 3.2或更高版本的设备上,此配置更改也不会重新启动您的活动)。 从API级别13开始添加。”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接