Android IllegalArgumentException:setTaskFromReuseOrCreateNewTask
我在尝试启动活动时遇到下一次崩溃:Android IllegalArgumentException:setTaskFromReuseOrCreateNewTask,android,android-intent,Android,Android Intent,我在尝试启动活动时遇到下一次崩溃: 2019-10-24 15:12:29.887 4245-4296/fr.zapotec.eliodroid.tv E/AndroidRuntime: FATAL EXCEPTION: Thread-6 Process: fr.zapotec.eliodroid.tv, PID: 4245 java.lang.IllegalArgumentException: setTaskFromReuseOrCreateNewTask: task=TaskRecord{6
2019-10-24 15:12:29.887 4245-4296/fr.zapotec.eliodroid.tv E/AndroidRuntime: FATAL EXCEPTION: Thread-6
Process: fr.zapotec.eliodroid.tv, PID: 4245
java.lang.IllegalArgumentException: setTaskFromReuseOrCreateNewTask: task=TaskRecord{6e69142 #1643 A=fr.zapotec.eliodroid.tv U=0 StackId=1 sz=3} is in a different stack (1) than the parent of r=ActivityRecord{8062424 u0 fr.zapotec.eliodroid.tv/fr.zapotec.eliodroid.SplashActivity t1644} (0)
at android.os.Parcel.readException(Parcel.java:1955)
at android.os.Parcel.readException(Parcel.java:1897)
at android.app.IActivityManager$Stub$Proxy.startActivities(IActivityManager.java:6812)
at android.app.Instrumentation.execStartActivitiesAsUser(Instrumentation.java:1677)
at android.app.Instrumentation.execStartActivities(Instrumentation.java:1632)
at android.app.ContextImpl.startActivities(ContextImpl.java:910)
at android.app.ContextImpl.startActivities(ContextImpl.java:884)
at android.content.ContextWrapper.startActivities(ContextWrapper.java:399)
at fr.zapotec.eliodroid.utils.LaunchActivityUtils.launchTVLastProgram(LaunchActivityUtils.java:22)
at fr.zapotec.eliodroid.standby.StandbyManager.launchAction(StandbyManager.java:253)
at fr.zapotec.eliodroid.standby.StandbyManager.onEventReceived(StandbyManager.java:141)
at fr.zapotec.eliodroid.handset.HandsetEventDispatcherImpl.handleKeyPress(HandsetEventDispatcherImpl.java:229)
at fr.zapotec.eliodroid.handset.HandsetEventDispatcherImpl.handleKeyPress(HandsetEventDispatcherImpl.java:204)
at fr.zapotec.eliodroid.handset.HandsetEventDispatcherImpl.onMessageReceived(HandsetEventDispatcherImpl.java:165)
at fr.zapotec.handsetbluetooth.HandsetManagerImpl.dispatchMessage(HandsetManagerImpl.java:49)
at fr.zapotec.handsetbluetooth.MessageManager.onNewMessageReceived(MessageManager.java:119)
at fr.zapotec.handsetbluetooth.HandsetThread.listenAndWrite(HandsetThread.java:126)
at fr.zapotec.handsetbluetooth.HandsetThread.run(HandsetThread.java:56)
这是清单文件:
<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:noHistory="true"
android:name=".StandbyActivity"/>
<activity
android:launchMode="singleTask"
android:name=".main.SimpleMainActivity"/>
<activity
android:launchMode="singleTask"
android:name=".main.InstallActivity"/>
我几乎同时从两个不同的来源启动活动时发生崩溃
有人知道如何在不从我的活动中删除“singleTask”的情况下解决此问题吗
作为参考,我的应用程序是“默认启动器”,所以如果系统需要显示启动器,可能会启动“SplashActivity”。SplashActivity仅显示启动屏幕并启动第一个活动(SimpleMainActivity.class)可能的工作方式是使用
singleTop的启动模式
,并设置标志FLAG\u activity\u NEW\u TASK
和FLAG\u activity\u CLEAR\u TOP
。对于通过通知启动的活动,确实建议这样做。通常使用活动显示初始屏幕不是正确的方法。请参见,它不是由通知启动的活动。它由事件(蓝牙事件或给定超时)启动。我绝对需要我的活动是“singleTask”,因为我的系统规范。我的观点是,你所做的很像一个通知,singleTop
应该给你相同的行为,如果你使用这些标志的话。你能更具体地说明一下什么需要singleTask
吗?我需要我的活动是singleton,不管发生什么。(singleTop并不保证我的活动是singleton)。我正在为AndroidTV开发一个Launcher类应用程序。如果你使用clear top和new task标志,那么它将有效地保证它是一个singleton。试一试NFC案例很奇怪,您可能需要使用taskAffinity
和allowtaskreeting
或使用广播接收器或其他活动捕捉NFC意图,然后将您自己的意图发送到您的singleton活动
startActivity(new Intent(context, MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK));