替代Intent.FLAG_ACTIVITY_CLEAR_TASK(Alternative to I

2019-07-30 00:31发布

我有两个应用的应用-B启动应用程序-A。 如果用户从在App-A应用AI通话结束内开始应用B,所以我也没问题。

如果用户去直接从应用程序抽屉中应用B或长按home键然后我实现低于该清除在应用程序A中的任务首先将所有的临时演员面前。 这所期望的影响,但只适用于API 11.在较低的API在APP-A的新任务不会改变,群众演员putExtra不会有任何效果。 任何替代FLAG_ACTIVITY_CLEAR_TASK ? 为API <= 10?

        Intent i = new Intent("com.App-A");
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

谢谢

贾森

Answer 1:

新IntentCompat应该已经帮助上,但显然该标志的API忽略低于11。

要使用IntentCompat做到以下几点:

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


Answer 2:

这将正常工作

i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY | 
               Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);


Answer 3:

我发现这些意图标志的最好的文档是在这里: http://blog.akquinet.de/2010/04/15/android-activites-and-tasks-series-intent-flags/

我不明白你正在尝试做的,但你有没有试过FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET



Answer 4:

我可能是错的理解你的要求,但它是当您启动B,你想有一个会死吗?

在A,它添加到清单中的活动标签:

android:noHistory=true

这将导致从内存只要它失去焦点除去活动。



Answer 5:

我仍然有很多无法理解的问题,而是想帮你解决这个问题。 由于评论只允许600个字符,不格式化好,我要创建一个答案,而不是,因为我敢肯定,我们一起能得到这个解决。

我希望能够重现你的问题。 要做到这一点,我创建了2个应用程序:APPAAPPB。 APPA有一个叫做单一的活动ActivityA和APPB有一个叫做单一活动ActivityB 。 无论ActivityAActivityB使用android:launchMode="singleTask"

ActivityA上有一个按钮,启动APPB和装饰,就像这样:

    Intent intent = new Intent("de.sharpmind.example.AppB");
    intent.putExtra("extra", "launched from AppA");
    startActivity(intent);
    finish();

ActivityB上有一个按钮,启动APPA是这样的:

    Intent intent = new Intent("de.sharpmind.example.AppA");
    intent.putExtra("extra", "launched from AppB");
    startActivity(intent);

这所有的作品我希望它。 APPA和APPB在不同的任务中运行。 “额外”正常出现在onCreate()每个应用程序的方法。

所以,可以请你把你的问题告诉我。 我怎样才能准确地再现您的问题? 你写了:

较低的API在APP-A的新任务不会改变,演员putExtra不会有任何效果。

你是什​​么意思? 你在哪里把演员和你在哪里得到他们,你能指望什么发生?

此外,什么是launchMode你的AppB

此外,当你有这样的问题,都在为APPA任务堆栈还有其他的活动?

请提供更多的信息,无论是在你原来的问题还是这里的意见。



Answer 6:

使用FLAG_ACTIVITY_CLEAR_TASK清除后退堆栈。 如果我理解正确的话,这是你想要的行为。

使用singleInstance而不是singleTask在你的清单将做到这一点。

在评论你说的,它必须是singleTask 。 我假设这是因为你需要在某些情况下返回堆叠。

由于launchMode不能programaticaly改变和FLAG_ACTIVITY_CLEAR_TASK不availble的用于API <= 10,则可能必须创建两个相同的活动。

一个与launchMode=singleTask和一个与launchMode=singleInstance

这种添加使用一个singleInstance从应用程序的抽屉启动时能获得清晰的堆栈:

 <category android:name="android.intent.category.LAUNCHER" />


文章来源: Alternative to Intent.FLAG_ACTIVITY_CLEAR_TASK