【问题标题】:Android service / async task / threadAndroid服务/异步任务/线程
【发布时间】:2011-11-29 07:54:23
【问题描述】:

对于我想在我的应用程序中完成的一件事,我有一点建议。我希望我的应用程序每次启动时都能通过互联网同步一些数据,我的想法是我有一个自定义操作栏,其中包含一个圆形进度条,我希望该进度条在我下载数据时运行并在何时停止运行下载结束。而且我想在我的 tabhost 中的所有活动中执行此操作(我的应用程序中有 2 个,我想在 main 中执行此操作)。我已经尝试过threadasync task,但是如果我更改活动并返回,进度条不会旋转,线程也一样。我是否遗漏了什么,或者我也应该尝试服务。

或者哪种方法是最好的方法?

【问题讨论】:

  • 那是很多代码,我只想知道完成此任务的最佳方法以及使用什么。我使用的代码运行良好,但问题是据我所知异步任务的生命周期取决于活动的生命周期,线程也有点相似。如果您可以为我提供一种方法来获得该线程是否正在运行,然后获得它完成的时间并在完成时做一些事情,我会很高兴,但这个问题的想法是获得最好的建议方法来做到这一点。
  • 你应该可以用AsyncTask来做到这一点
  • 这是我正在做的异步任务:stackoverflow.com/questions/8259560/…

标签: android service android-asynctask


【解决方案1】:

您必须注意活动的生命周期。假设您为所有活动下载相同的数据(就像我在游戏中使用高分更新所做的那样),最好的方法(我能够提供)是生成单独的线程,但只有一次(我使用单例对象来做这个,所以我不会开始下载两次)。当下载准备好时,它会触发 Intent,以便 Activity 知道并正确更新 UI。

所以工作流程是这样的:

  • 恢复活动
  • 获取单例实例
  • 开始下载以防它不活跃/没有必要
  • 更新界面显示正在下载 ...
  • 接收通知广播并更新 UI

我还可以将此代码重用于广播接收器,因此我可以安排定期更新高分(即使游戏目前不活跃)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2013-11-14
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多