从其他堆栈清除任务

时间:2019-06-07 13:08:18

标签: android android-activity

我的活动1(SplashActivity)在前台运行。

此启动活动正在其onStart()回调中启动另一个Activity2。

从elswhere(在应用程序上下文中运行的单例)中,我想启动Activity3并清除任务以使其成为新的根。此调用在onStart()中的另一个startActivity之后几毫秒完成,但由于以下异常而失败:

java.lang.IllegalArgumentException: setTaskFromReuseOrCreateNewTask: task=TaskRecord{df9fb2e #10 A=com.example.myapp.myflavor U=0 StackId=1 sz=0} is in a different stack (1) than the parent of r=ActivityRecord{3b14930 u0 com.example.myapp.myflavor/com.example.myapp.SplashActivity t11} (0)
at com.android.server.am.ActivityRecord.reparent(ActivityRecord.java:971)
at com.android.server.am.ActivityStarter.addOrReparentStartingActivity(ActivityStarter.java:1992)
at com.android.server.am.ActivityStarter.setTaskFromReuseOrCreateNewTask(ActivityStarter.java:1808)
at com.android.server.am.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1187)
at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:1002)
at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:567)
at com.android.server.am.ActivityStarter.startActivityLocked(ActivityStarter.java:272)
at com.android.server.am.ActivityStarter.startActivityMayWait(ActivityStarter.java:824)
at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4497)
at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4464)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:121)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2935)
at android.os.Binder.execTransact(Binder.java:674)

活动是通过以下方式在AndroidManifest.xml中定义的:

<activity
    android:launchMode="singleTask"
    android:name=".SplashActivity"
    android:noHistory="true"
    android:theme="@style/SplashTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <category android:name="android.intent.category.HOME" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
    </intent-filter>
</activity>
<activity
    android:launchMode="singleTask"
    android:name=".Activity2"/>
<activity
    android:launchMode="singleTask"
    android:name=".Activity3"
    android:noHistory="true"/>

Activity2和Activity3以标志开头:

Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK

调用第一个startActivity时,只有一个任务的ID为14,并且仅包含一个活动:SplashActivity。

调用第二个startActivity时,只有一个任务的ID为-1,并且包含0个活动。

那么,如何使startActivity健壮到正在进行另一个startActivity的情况,那将是什么解决方案?

有什么想法吗?

据我了解,我会通过删除singleTask启动模式来避免此错误,但是我需要它,因为我的应用程序可以通过不同的方式启动...

其他要点:从ADB更新应用程序时会引发异常。当应用程序在设备启动时自动启动时,不会引发异常。 (我的应用程序是默认启动器,因此它会自动启动)。 ->可以用两个活动开始时的不同顺序来解释。

1 个答案:

答案 0 :(得分:0)

我希望了解您的问题 您可以使用 sheardPreferences 并将其值设置为零和一..如果值 zero 是root,则splashScreen和如果是 One 正在Activity2中。