繁体   English   中英

Android:launchMode =“singleTask”的行为与描述不一样?

[英]Android: Behaviour of launchMode=“singleTask” not as described?

我一直在学习Android,并遇到了launchMode =“singleTask”的问题。 该文档指出,当使用此属性时,活动始终作为根活动启动到新任务中。 其次,文档说明如果Intent在其任务堆栈中位于其上方的Activities时针对此类Activity,则会丢弃此类Intent(尽管该任务仍然被置于前台)。

我一直在玩这个,我观察到的行为完全不同。 特别是: - 使用launchMode =“singleTask”的活动并不总是任务堆栈中的根活动。 它们只是在具有相同亲和力的现有堆栈的顶部。 - 当Intent以此类Activity为目标并且堆栈中有其他活动时,不会丢弃Intent。 而是丢弃堆栈中它上面的活动。 然后,Intent通过onNewIntent正常传递给Activity。

有人可以确认这是实际行为吗? 如果是这样,为什么文件不正确? 如果不是我做错了什么。

编辑:

可以在此处找到演示此行为的示例: http//groups.google.co.uk/group/android-developers/browse_thread/thread/fd8f249803b4688a#对于交叉发布抱歉,但我无法获得示例一个体面的格式发布在这里...

这是taskAffinity的问题。 当您启动活动时,Android会检查您要启动的活动的taskAffinity 如果它与任务中root活动的taskAffinity相同,那么它将忽略launchMode="singleInstance"launchMode="singleTask" (因为这些启动模式将要求Android创建一个新任务来启动活动)并在当前任务中启动活动。

不幸的是,这没有很好的记录,但taskAffinity优先于launchMode

如果你真的想要一个singleTasksingleInstance活动(这通常不是正确的事情,因为它带来了一堆乱七八糟的东西你可能会出错),那么你需要确保你的singleInstance或者singleTask活动在其<activity>定义中的清单中具有以下内容:

android:taskAffinity=""

文件说:

FLAG_ACTIVITY_NEW_TASK ...产生与“singleTask”launchMode相同的行为......

如何使用Intent(FLAG_ACTIVITY_NEW_TASK) 启动活动取决于活动关联

如果已存在与新活动具有相同亲缘关系的现有任务,则会将活动启动到该任务中。 如果没有,它开始一项新任务。

因此,必须对singleTask launchMode进行相等的亲和性检查。

我可以为这种模式添加一些奇怪行为的经验。 也许这个问题的答案对我有帮助。

我想给我的第一个屏幕一个位置选择搜索。 我想将查询传递回我的第一个Activity。 该Activity是搜索调用和查询接收。 然而,“singleTask”破坏了我的计划;(

查询的搜索意图从未到达我的第一个活动。 相反,“android.intent.action.MAIN”达到了我的第一个活动。 当删除“singleTask”时,Search-Intent会通过。 但后来我创建了我的主屏幕的几个实例。

<activity
  android:label="@string/app_name"
  android:name="ActivityStart"
  android:screenOrientation="portrait"
  android:launchMode="singleTask">
  <intent-filter>
  <action
      android:name="android.intent.action.SEARCH" />
    <action
      android:name="android.intent.action.MAIN" />
    <category
      android:name="android.intent.category.LAUNCHER" />

  </intent-filter>
  <meta-data
    android:name="android.app.searchable"
    android:resource="@xml/searchable" />

</activity>

现在我使用TextView代替......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM