Android несколько экземпляров Activity - PullRequest
2 голосов
/ 19 июля 2011

У меня проблема, когда в backstack присутствуют несколько экземпляров действия.

например.

Стек: A> B> C Нажмите Домой и используйте другие приложения, затем перезапустите мое приложение Стек: A> B> C> A

Я ожидаю, что мое приложение возобновит работу с действием C, что в большинстве случаев происходит, но иногда оно возобновляется с действием A, а затем, когда я нажимаю назад, оно переходит к действию C.

Я знаю, что эта проблема вызвана не тем, что Android убивает мое приложение, как если бы это было так, оно возобновилось бы с действием A в качестве корневого.

Я попытался изменить атрибут launchMode на singleTask и singleInstance, но это приводит к тому, что действие A возобновляется как корень, а это не то поведение, которое мне нужно, я хочу, чтобы оно вернулось к ранее просмотренному действию с сохранением backstack (Я понимаю, что это не всегда возможно, если ОС убивает приложение, и это нормально).

Я не верю, что установка атрибута launchMode в singleTop была бы полезной, поскольку это предотвратит ситуации A> A, но не A> B> A или A> B> C> A и т. Д.

Manifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package=""
  android:versionCode="1"
  android:versionName="1.0"
  android:installLocation="auto"
    >

<application android:label="@string/app_name" android:debuggable="false"
        android:name=""
        android:icon="@drawable/icon" android:theme="@style/CustomTheme"
        android:targetSdkVersion="8" android:minSdkVersion="4">

    <activity android:name=".activity.A"
            android:windowSoftInputMode="stateUnchanged|adjustPan"
            android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
            </activity>
    <activity android:name=".activity.B"
            android:screenOrientation="portrait"/>
    <activity android:name=".activity.C"
            android:screenOrientation="portrait" />
    <activity android:name=".activity.D"
            android:screenOrientation="landscape"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />
    <activity android:name=".activity.E"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />

    <service android:name=".service.S" />

    <uses-library android:name="com.google.android.maps" />


</application>

<uses-sdk android:minSdkVersion="4"
      android:targetSdkVersion="8"
        />

 <supports-screens
    android:largeScreens="false"
    android:normalScreens="true"
    android:smallScreens="true"
    android:anyDensity="true"
         />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Любой совет будет принята с благодарностью

David

1 Ответ

1 голос
/ 22 января 2012

Требуемое поведение - это то, для чего предназначено singleTask.

Тогда проблема в том, почему возобновление вашего приложения возвращается к корню. Если это просто из-за обычного способа работы системы (например, 30-минутный тайм-аут), и вы действительно хотите предотвратить это, вы можете использовать android:alwaysRetainTaskState="true".

...