Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在活动之间切换的意图将终止我的第二个活动_Android_Android Intent_Android Activity - Fatal编程技术网

Android 在活动之间切换的意图将终止我的第二个活动

Android 在活动之间切换的意图将终止我的第二个活动,android,android-intent,android-activity,Android,Android Intent,Android Activity,我的问题是: 我的应用程序中有多个活动,其中两个有点“特殊”。 活动A是一种家庭类型的活动,用于启动其他活动。它还保存一些其他信息,可以从后台更新(使用onNewIntent)。在舱单上我声明它是单顶的。它为结果启动其他活动,所以它不能是单个任务或实例(startActivityForResult不适用于它们)。 活动B是一个独立的活动,在某些事件上启动,也声明为singleTop。它还为result启动其他活动,并使用其onNewIntent。 我有两个单独的通知,它们链接到相应的活动。 我两

我的问题是: 我的应用程序中有多个活动,其中两个有点“特殊”。 活动A是一种家庭类型的活动,用于启动其他活动。它还保存一些其他信息,可以从后台更新(使用onNewIntent)。在舱单上我声明它是单顶的。它为结果启动其他活动,所以它不能是单个任务或实例(startActivityForResult不适用于它们)。 活动B是一个独立的活动,在某些事件上启动,也声明为singleTop。它还为result启动其他活动,并使用其onNewIntent。 我有两个单独的通知,它们链接到相应的活动。 我两者都用

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
正常流量为:

  • A正在运行
  • 有些事情发生了——B启动了
  • 若用户按下Home按钮,我有两个A和B的通知
  • 问题是: 如果用户按下A的通知,A将启动,但B将被终止(由于清除_顶部标志) 如果在该用户按下通知B后,新B启动(活动已停止,但我需要旧实例

    我读过这篇文章- 据我所知,FLAG_ACTIVITY_NEW_TASK应在单独的任务中启动活动,在这种情况下,FLAG_ACTIVITY_CLEAR_TOP不应杀死B

    解决方法是重新编写逻辑,使其成为单个任务,并处理onNewIntent中其他活动的结果,但如果可能有其他解决方案,我不希望这样做。 我也试过了

    FLAG_ACTIVITY_REORDER_TO_FRONT | FLAG_ACTIVITY_SINGLE_TOP 
    


    启动B,但两者都不起作用。

    我的问题是,两个活动都在同一个任务上运行。尽管有文档标志“活动”和“新建”任务,但它不会在新任务中启动活动,而是将。您必须在特定活动的清单中使用android:taskafinity,并将其设置为唯一值。只有这样,它才会在新任务中启动。这样一来,用于A的FLAG\u ACTIVITY\u CLEAR\u TOP不会破坏B。

    您的实现是错误的,如果将某个活动的实例从后堆栈中删除,则不能保留该实例。您必须能够保存活动状态并在每次启动时重新创建其状态。我同意您的看法,但在这种情况下,这不是一个选项。对我来说,这是继承的代码,活动本身包含很多信息和状态(我知道这是不正确的,我已经尝试对它进行重构,并在一些管理器中移动大部分业务逻辑,但仍然存在很多),在这种情况下,我需要类似于单例活动的东西,但不使用单例实例数据是一种业务逻辑,只需将其移动到单例类即可。您正在攻击MVC模式。
    FLAG_ACTIVITY_MULTIPLE_TASK | FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_SINGLE_TOP | FLAG_ACTIVITY_CLEAR_TOP