Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.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
Java Intent.FLAG\u活动\u清除\u任务的替代方案_Java_Android_Android Intent - Fatal编程技术网

Java Intent.FLAG\u活动\u清除\u任务的替代方案

Java Intent.FLAG\u活动\u清除\u任务的替代方案,java,android,android-intent,Java,Android,Android Intent,我有两个App-B启动App-A。如果用户从App-A内部启动App-B,我会在App-A上调用finish,所以我没有问题 如果用户直接从应用程序抽屉进入应用程序B或长按home按钮,那么我将执行下面的操作,在应用所有额外功能之前,首先清除应用程序A中的任务。这具有预期的效果,但仅适用于API 11。在较低的API上,APP-A中的新任务不会更改,额外的putExtra将不起作用。标记活动\u清除任务的任何替代方案?对于API,我在理解这个问题时仍然有很多困难,但我愿意帮助您解决它。由于注释只

我有两个App-B启动App-A。如果用户从App-A内部启动App-B,我会在App-A上调用finish,所以我没有问题


如果用户直接从应用程序抽屉进入应用程序B或长按home按钮,那么我将执行下面的操作,在应用所有额外功能之前,首先清除应用程序A中的任务。这具有预期的效果,但仅适用于API 11。在较低的API上,APP-A中的新任务不会更改,额外的putExtra将不起作用。
标记活动\u清除任务的任何替代方案
?对于API,我在理解这个问题时仍然有很多困难,但我愿意帮助您解决它。由于注释只允许600个字符,而且格式不好,所以我将创建一个答案,因为我相信我们可以一起解决这个问题

我希望能够重现你的问题。为此,我创建了两个应用程序:AppAAppB。AppA有一个名为
ActivityA
的活动,AppB有一个名为
ActivityB
的活动。
ActivityA
ActivityB
都使用
android:launchMode=“singleTask”

ActivityA
上有一个按钮,用于启动AppB并完成,如下所示:

    Intent intent = new Intent("de.sharpmind.example.AppB");
    intent.putExtra("extra", "launched from AppA");
    startActivity(intent);
    finish();
    Intent intent = new Intent("de.sharpmind.example.AppA");
    intent.putExtra("extra", "launched from AppB");
    startActivity(intent);
ActivityB
上有一个按钮,可以像这样启动AppA:

    Intent intent = new Intent("de.sharpmind.example.AppB");
    intent.putExtra("extra", "launched from AppA");
    startActivity(intent);
    finish();
    Intent intent = new Intent("de.sharpmind.example.AppA");
    intent.putExtra("extra", "launched from AppB");
    startActivity(intent);
这一切都是我所期望的。AppA和AppB在不同的任务中运行。在每个应用程序的
onCreate()
方法中可以正确地看到“extra”

那么,你能告诉我更多关于你的问题吗。我怎样才能准确地再现你的问题?你写道:

在较低的API上,APP-A中的新任务不会更改,额外的putExtra将不起作用

你这是什么意思?你把多余的东西放在哪里,你从哪里得到它们,你期望会发生什么

另外,您的
AppB
launchMode
是什么

此外,当您遇到此问题时,AppA的任务堆栈中是否还有其他活动


请在原始问题中或在此处作为注释提供更多信息。

我找到的关于这些意图标志的最佳文档如下:


我不明白您想做什么,但您是否尝试过在任务重置时清除活动?使用
FLAG\u ACTIVITY\u CLEAR\u TASK
清除后台堆栈。 如果我理解正确,这就是你想要的行为

在清单中使用
singleInstance
而不是
singleTask
可以做到这一点

您在评论中说它必须是
singleTask
。我假设这是因为在某些情况下需要后台堆栈


由于
launchMode
无法通过编程更改,并且
FLAG\u ACTIVITY\u CLEAR\u TASK
对于API不可用我可能理解错误,但当您启动B时,您是否希望A被杀死

在中,将其添加到清单中的活动标记:

android:noHistory=true

这将导致活动在失去焦点时立即从内存中删除。

这将正常工作

i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY | 
               Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
新的API应该在这方面有所帮助,但显然对于低于11的API,该标志被忽略

要使用IntentCompat,请执行以下操作:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);

如果堆栈已经存在,则不清除它…您真的是指两个不同的应用程序吗?或者您是在谈论同一应用程序中的两个活动?发布清单的相关部分,我们可以为您提供更多帮助。是的,两个不同的应用程序正在启动的应用程序必须是SingleTask,但不能用于此部分功能。抱歉,我仍然不明白您正在尝试做什么。您说“正在启动的是singleTask”。那是app-A还是app-B?您是否试图在此基础上创建两个单独的任务?你没有提供足够的信息。请更详细地解释你正在努力实现的目标。也许有更好的/不同的方法来获得相同的结果。app-a是正在推出的一款。任何时候都不能只执行一项任务。希望这是真的,但是:“只有支持API 11或更高版本的设备才会遵守此标志。”@kabuko我完全忽略了这一点。但那又有什么意义呢!。我想我们可以不用做if(api>x),但仍然不是很有帮助。