自定义活动backstack - 应用程序在重新启动时关闭

时间:2016-07-07 13:52:24

标签: android android-intent android-activity

我有一些特定的要求要在我的应用中实现。这是使用应用程序之前的某种设置。活动应该是这样的:

A - > B或C - > D - > E-> F ......等等。

应用程序始终从A开始,然后转到B或C.但是如果在之前的启动期间在后面的活动中设置了某些内容,则构建自定义堆栈并且所有内容都从最新的未设置活动开始(可以像往返一样导航这样:

(已配置D和E)

A-> B或C - > F然后回到E - > d。

当在D中时,在另一个后退按钮按下我应该关闭应用程序。

一切正常。

但是我最近注意到,如果我将应用程序留在D中,并从启动器再次启动,则应用程序无法打开。在日志中没有真正发生的事情,我看到的只是我在活动A报告中的自定义视图" onDetachedFromWindow"打回来。没有活动报告任何其他操作,但我没有记录生命周期回调。

当声音效果弹出时,会收到点击发射器图标。

当我再次点击时,它再次从活动A正确启动。

现在代码:

从清单中摘录 - 名称更改以匹配上面的示例,不相关的内容被切断:

    <activity
        android:name=".ui.A"
        android:label="@string/title_activity_main"
        android:taskAffinity="A"
        android:excludeFromRecents="true"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".ui.G"
        android:theme="@style/AppTheme.NoActionBar"/>

    <activity
        android:name=".ui.B"
        android:theme="@style/AppTheme"
        android:windowSoftInputMode="adjustResize"/>

    <activity 
        android:name=".ui.C"
        android:theme="@style/AppTheme"
        android:windowSoftInputMode="adjustResize"/>


    <activity
        android:name=".ui.D"
        android:theme="@style/AppTheme.NoTitle"
        android:windowSoftInputMode="adjustResize"/>

    <activity
        android:name=".ui.E"
        android:theme="@style/AppTheme.NoTitle"
        android:windowSoftInputMode="adjustResize"/>


    <activity
        android:name=".ui.F"
        android:theme="@style/AppTheme.NoTitle"
        android:windowSoftInputMode="adjustResize"/>

Backstack创建:

public static TaskStackBuilder getSetupTaskStack(final Activity activity, final Config partialConfig) {
    final TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(activity);

    taskStackBuilder.addNextIntent(new Intent(activity, D.class));
    if (partialConfig == null || partialConfig.getD() == null) {
        return taskStackBuilder;
    }

    taskStackBuilder.addNextIntent(new Intent(activity, E.class));
    if (partialConfig.getE() == null) {
        return taskStackBuilder;
    }

    taskStackBuilder.addNextIntent(new Intent(activity, F.class));
    if (partialConfig.getF() == null) {
        return taskStackBuilder;
    }

    taskStackBuilder.addNextIntent(new Intent(activity, G.class));
    if (partialConfig.getG()==null) {
        return taskStackBuilder;
    }

    final Intent mainActivityIntent = MainActivity.getActivityIntent(activity);

    return TaskStackBuilder.create(activity).addNextIntent(mainActivityIntent);
}

活动没有 onBackPressed()覆盖。

我尝试使用参数: clearOnTaskLaunchfinishOnTaskLaunch但我不完全确定他们是否可以在这里提供帮助,因为我不确定这里的活动发生了什么。

当确定应该启动哪个活动时,在B或C中进行后台堆叠创建。然后只需使用 startActivities()

启动它

0 个答案:

没有答案