【问题标题】:Android multiple instances of ActivityAndroid多个Activity实例
【发布时间】:2011-07-19 10:17:32
【问题描述】:

我遇到了一个问题,即后台堆栈中存在多个活动实例。

例如

堆栈:A > B > C 按主页并使用其他一些应用程序然后重新启动我的应用程序 堆栈:A > B > C > A

我希望我的应用程序可以使用活动 C 恢复,在大多数情况下确实如此,但偶尔它会使用活动 A 恢复,然后当我按下返回时,它会转到活动 C。

我知道这个问题不是由 android 杀死我的应用程序引起的,就好像它会以活动 A 作为根目录恢复的情况一样。

我已经尝试将 launchMode 属性更改为 singleTask 和 singleInstance 但这会导致活动 A 被恢复为根,这不是我想要的行为,我希望它返回到先前查看的活动,并且返回堆栈完好无损(我知道如果操作系统杀死应用程序,这并不总是可能的,这很好)。

我不相信将 launchMode 属性设置为 singleTop 会有用,因为这会阻止 A > A 的情况,但不会阻止 A > B > A 或 A > B > C > A 等

清单:

<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" />

任何建议将不胜感激

大卫

【问题讨论】:

  • 如何启动活动 A?它是主要活动/启动器活动吗?
  • 是的,它是主要/启动器活动:codecode
  • 其他活动是否会更改默认的 App Stack 行为?
  • 不,他们没有指定任何非默认行为
  • 你能发布 AndroidManifest.xml 吗?

标签: java android android-activity multiple-instances


【解决方案1】:

您正在寻找的行为是 singleTask 的本意。

那么,问题就是为什么恢复您的应用程序会弹回根目录。如果只是因为系统的正常工作方式(例如,30 分钟超时),而您确实想防止这种情况发生,您可以使用android:alwaysRetainTaskState="true"

【讨论】:

    猜你喜欢
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多