【问题标题】:How to resume an existing task in its current state如何以当前状态恢复现有任务
【发布时间】:2015-11-17 06:15:19
【问题描述】:

我的应用程序有两个活动 A 和 B。A 是任务的根,是从启动图标启动的任务。 B可以从A开始。

除了从启动图标启动 A 外,还可以通过单击另一个应用程序中的文件来启动 A,例如单击云端硬盘中的电子邮件附件或文件。我通过向清单文件中的意图过滤器添加操作和类别来完成此操作。

我想这样当 A 从另一个应用程序启动时,而不是创建一个新任务,我希望现有任务恢复到它之前的相同状态。这可能是活动 A 或 B,无论用户在按下 Home 键之前碰巧在哪里。

我尝试了各种启动模式和意图标志,但似乎没有任何效果。

【问题讨论】:

    标签: android android-activity android-task


    【解决方案1】:

    广播与清单中的启动器意图相同的意图:

    Intent intent = new Intent(context, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setAction(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    

    我不知道为什么,但这会引发现有任务而不是开始新任务。相比之下,以“官方”方式获得的启动器意图实际上会启动一个新任务:

    Intent intent = context.getPackageManager()
       .getLaunchIntentForPackage(context.getPackageName());
    

    【讨论】:

    • 试过这个,它似乎工作,至少在具有 API 26 的 Pixel 设备上。唯一需要注意的是,任务在没有进入动画的情况下重新打开。
    • 但官方解决方案适用于谷歌地图和谷歌浏览器(不创建新任务)。不知道他们是如何实现的。我尝试了所有可能的启动模式,但没有成功
    【解决方案2】:

    将启动模式更改为单任务。并监听 onNewIntent()

    【讨论】:

    • 如果将启动模式更改为单任务,则可以使用onNewIntent检测到已接收到新意图,但如果旧任务已被接收,则知道已接收到新意图是无用的销毁。
    • 你可以编码 onNewIntent(getIntent());在 onCreate 中。
    猜你喜欢
    • 2021-05-22
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 2011-10-21
    • 2022-09-27
    • 2015-07-20
    • 2011-06-27
    相关资源
    最近更新 更多