如果已作为根用户在backbackback中,Android活动未启动?
我有一个包含3个活动的示例应用程序:Main、a和B。它们都没有任何启动模式 现在我这样做:如果已作为根用户在backbackback中,Android活动未启动?,android,android-intent,Android,Android Intent,我有一个包含3个活动的示例应用程序:Main、a和B。它们都没有任何启动模式 现在我这样做: 打开应用程序,将显示主要活动 使用“后退”按钮离开应用程序,以便没有活动正在运行 接收启动新活动a(新任务标志)的广播 单击活动a中的按钮打开活动B(无标志) 接收启动新活动a(新任务标志)的广播 新活动A未启动 (如果我回去,仍然有上一个活动A) 在第6步,活动A应该呈现,但没有呈现。 如果我尝试呈现活动C(在#5中),它将按预期呈现 如果在#2中,我通过homebutton离开应用程序,则一切正常
标记活动\u清除\u顶部|标记活动\u单个\u顶部
,但我想保持后台
更新-来源:
您可以查看,但我使用的是Xamarin(它基本上是用C#编写的原生Android,非常类似于Java)。
这是构建清单的内容(删除了Xamarin内容):
更新选项3:这将使活动处于最佳状态
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
选项1:在启动活动A时,将标志“活动”重新排序设置为“最前面”。这将使活动A位于堆栈顶部
activityAIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
选项2:浏览Android文档,只有“标准”启动模式才能创建活动的多个实例
请参阅下表
本文档说明了每种模式的用法:
如果每次都需要新实例,请将标准启动模式添加到活动A中
android:launchMode="standard"
好的,让我们按照操作顺序来看看这一点
主活动(根)
ActivityA(根)
ActivityA(根)->ActivityB(顶)
ActivityA(根)->ActivityB(顶)
此处未启动ACTIVITY A,因为它是使用意向标志“flag_ACTIVITY_NEW_TASK”启动的,该标志包含以下文档:ActivityA(root)->ActivityB(top)
,ActivityA
已存在于任务中,因此任务
作为一个整体,这意味着活动b
是
仍然处于任务的顶端
如果我尝试呈现活动C(在#5中),它将按预期呈现。
ActivityC
是任务中不存在的新活动,因此
是为您创建的
如果在#2中,我通过homebutton离开应用程序,则一切正常。
homebutton press的问题是,在本例中,main活动没有被破坏,只是被推到了后台
因此,在#2之后,backback的状态看起来仍然将MainActivity实例作为根:
主要活动(根)
现在,在#5之前,backbackback应该是这样的:
Main Activity(root)->ActivityA->ActivityB(top)
在#5之后,你的后背看起来像这样:
Main Activity(root)->ActivityA->ActivityB->ActivityA(top)
我认为这似乎是因为默认情况下启动MainActivity
时带有意图标志:
标记活动新任务标记活动重置任务如果需要
这还会触发任务重新分配,因此它可以控制使用新任务标志(与父应用程序具有相同的关联性)创建的新活动,以及如何将此类活动移动到其任务
你可以找到更多关于这个的信息
我如何确保活动始终呈现?我可以使用FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP,但我想保留backbackback。
由于这是一个堆栈数据结构,您无法对活动进行重新排序,但是,您可以通过在创建ActivityA的接收器中添加以下标志来解决此问题:flag_ACTIVITY_NEW_TASK | flag_ACTIVITY_MULTIPLE_TASK
,因为这将确保为该活动创建新实例/任务,而不管它是否已经存在。(不是推荐的解决方案
-(但有效)
但是,如果要维护相同的ActivityA
实例,则必须向清单中的活动添加taskAffinity参数
<activity android:name=".ActivityB" android:taskAffinity="com.example.pendingintent"></activity>
<activity android:name=".ActivityA" android:taskAffinity="com.example.abctest" />
是一个很好的幻灯片,它解释了taskAffinity及其如何影响活动的创建。这些活动是否具有任务affinity?不,我对任务affinity了解不多。应该吗?它没有蜜蜂
<activity android:name=".ActivityB" android:taskAffinity="com.example.pendingintent"></activity>
<activity android:name=".ActivityA" android:taskAffinity="com.example.abctest" />