如何以当前状态恢复现有任务
Posted
技术标签:
【中文标题】如何以当前状态恢复现有任务【英文标题】: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 键之前碰巧在哪里。
我尝试了各种启动模式和意图标志,但似乎没有任何效果。
【问题讨论】:
【参考方案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 中。以上是关于如何以当前状态恢复现有任务的主要内容,如果未能解决你的问题,请参考以下文章
java 文件下载,支持任务暂停,恢复,断点续传;任务状态查询;任务并发控制