我的活动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更新应用程序时会引发异常。当应用程序在设备启动时自动启动时,不会引发异常。 (我的应用程序是默认启动器,因此它会自动启动)。 ->可以用两个活动开始时的不同顺序来解释。
答案 0 :(得分:0)
我希望了解您的问题 您可以使用 sheardPreferences 并将其值设置为零和一..如果值 zero 是root,则splashScreen和如果是 One 正在Activity2中。