在onDestroy中执行长时间运行的操作

时间:2012-02-28 09:23:35

标签: java android multithreading lifecycle jmdns

我需要在onDestroy()的{​​{1}}中执行“长时间运行”的清理操作。这样做的最佳方式是什么?

如果我使用Activity执行此操作,我的Thread将立即返回;但是线程参考会发生什么?我正在寻找关于我需要注意的任何含义/陷阱/跳线的建议,因为我认为即使在活动被销毁之后该过程仍然存在。


背景:

我在我的应用中使用JmDNS。当用户完成我的应用程序后,我想清理JmDNS实例。我使用onDestroy()类的close()方法执行此操作。但是,此方法需要超过5秒才能完成。结果,用户在触摸返回键后长时间在屏幕上看到JmDNS

我还没弄清楚为什么Activity需要那么久,但同时我也意识到我真的不需要等待近距离成功完成。我所需要的是一种“触发”结束并完成它的方法。

2 个答案:

答案 0 :(得分:3)

我最终做了我在问题中提出的问题 - 我开始ThreadonDestroy()执行长时间运行。

我必须考虑的一个案例是用户甚至在长时间运行完成之前重新打开我的应用程序。在我的应用程序中,这意味着创建了一个新的JmDNS实例。因此,我在onDestroy

中单独清理每个实例

您的用例可能有所不同 - 您可能只想在尚未运行的情况下启动清理线程(使用Thread的{​​{1}}方法或某种此类技术)。

这是一些示例代码。要了解“单独清理每个实例”部分,请执行以下步骤:

  1. 启动应用
  2. 按后退按钮。您将在LogCat
  3. 中看到清理操作
  4. 重新启动该应用。
  5. 再次退出应用。现在,您将看到两组清理日志 - 第一组表示第一个实例的清理;第二组对应第二个实例。

    isAlive()

答案 1 :(得分:0)

尝试在onBackPressed()中启动帖子,并在线程完成时调用destroy()