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

Oll*_*lly 8 android

我一直在学习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# 对于交叉发布抱歉,但我无法获得示例一个体面的格式发布在这里...

Dav*_*ser 7

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

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

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

android:taskAffinity=""
Run Code Online (Sandbox Code Playgroud)


One*_*rld 0

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

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

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

<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>
Run Code Online (Sandbox Code Playgroud)

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