Android:恢复 singleTask 活动

Posted

技术标签:

【中文标题】Android:恢复 singleTask 活动【英文标题】:Android: resume a singleTask activity 【发布时间】:2014-11-17 22:49:31 【问题描述】:

我有一个端口上有一个 UDP 套接字的活动。如果我按下 Home 按钮,活动将进入后台,OnPause()OnStop() 方法将被调用。现在我想在收到一些 UDP 数据包时恢复我的活动。 阅读我理解的其他帖子我必须:

    将活动声明为android:launchMode="singleTask"(或singleInstance) 然后,当我想恢复活动时:
Intent intent = new Intent(this.getApplicationContext(), myActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 开始活动(意图);

这个解决方案对我不起作用。对startActivity(intent) 的调用不会显示我在前台的活动,并且不会调用onResume()

以下标志可以完成这项工作,但我不想清除任务并重新启动新任务。

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

【问题讨论】:

你的 udp 套接字正在服务中,对吧? 主要活动关闭时套接字处于服务状态。当我创建主要活动时,套接字在服务中未绑定,主要活动绑定它。 【参考方案1】:

为了将自己的任务带到前台,需要在非Activity Context上调用startActivity(),例如:

getApplicationContext().startActivity(intent);

此外,您无需使用任何特殊的启动模式(singleTasksingleInstance)即可使用。

这是在 Android 4.4 中修复的 Android 错误。由于这个问题来自 2014 年,我假设 OP 看到了这个问题。

请参阅How to resume Android Activity programmatically from background 和评论线程。

【讨论】:

以上是关于Android:恢复 singleTask 活动的主要内容,如果未能解决你的问题,请参考以下文章

singleTask 的多个活动

Android singleTask 还是 singleInstance 启动模式? [关闭]

使用“singleTask”作为启动模式时无法完全关闭活动

Android中维护标准应用Activity回栈状态(使用singleTask启动模式)

即使使用 launchMode="singleTask" 也可以启动两次活动

singleTask 启动模式不起作用