我有一些特定的要求要在我的应用中实现。这是使用应用程序之前的某种设置。活动应该是这样的:
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()覆盖。
我尝试使用参数: clearOnTaskLaunch和finishOnTaskLaunch但我不完全确定他们是否可以在这里提供帮助,因为我不确定这里的活动发生了什么。
当确定应该启动哪个活动时,在B或C中进行后台堆叠创建。然后只需使用 startActivities()
启动它