Dav*_*ebb 24

我的经验法则是,一个AsyncTask是当我想要做的事绑单ActivityService是当我想要做一些开始它是在后台活动结束后,将进行.

因此,如果我想在Activity不占用UI 的情况下进行一小部分后台处理,我将使用AsyncTask.然后我会使用默认HandlerActivity传回的消息,以确保更新发生在主线程.在主线程上处理更新有两个好处:UI更新正确发生,您不必担心同步问题.

例如,如果我想下载可能需要一段时间,我会使用Service.因此,如果我Activity在我的应用程序或其他应用程序中完全转到另一个应用程序,我Service可以继续运行并继续下载文件,以便在我返回应用程序时准备就绪.在这种情况下,我可能会在下载完成后使用状态栏通知,因此用户可以选择在方便的时候返回我的应用程序.

如果你使用AsyncTask一个长期运行的过程,你会发现它可能会在你离开之后继续,Activity但是:

  • 如果Activity处理完成后处于后台,则在尝试使用结果等更新UI时可能会出现问题.
  • Activity当Android需要内存时,背景更容易被Android杀死Service.

  • 这个答案真的钉了它.关于在使用`AsyncTask`或'Service`之间决定使用'AsyncTask`-时可能出现的问题的最后一点.我认为第一个限制仍然可以解决 - 而不是直接从`AsyncTask`更新UI,如果你在'服务'中做你要做的事情(广播意图,显示通知或插入数据)进入`ContentProvider`以便稍后被'Activity`选中.然而,第二点 - 关于活动的那一点更可能被杀死 - 这是最相关的一点. (2认同)

yan*_*nko 13

当你有一些必须在后台运行很长一段时间的东西时,请使用服务.它不受任何活动的约束.规范的例子是音乐播放器.当在当前活动中必须在后台完成某些操作时,
AsyncTask非常棒.例如下载,搜索文件内的文本等.
我个人仅使用处理程序将更改发布到UI线程.例如,您在后台线程中进行一些计算并通过处理程序发布结果.

底线:在大多数情况下,AsyncTask是您所需要的.

  • 您实际上更喜欢处理程序更新UI线程与AsyncTasks? (4认同)

Uni*_*iqe 5

为了补充其他关于服务和AsyncTask之间区别的答案,值得注意的是[0]:

  • 服务不是一个单独的过程.Service对象本身并不意味着它在自己的进程中运行; 除非另有说明,否则它与其所属的应用程序运行的过程相同.
  • 服务不是一个线程.它本身不是从主线程开始工作的手段(以避免应用程序无响应错误).

服务往往是描述应用程序重要部分的东西 - 而不是AsyncTask,它通常有助于活动和/或提高UI响应能力.除了提高代码清晰度之外,还可以与其他应用程序共享服务,从而在您的应用程序与外部世界之间提供清晰的界面.

而不是一本书我会说开发者指南有很多好的答案.

[0]来源:http://developer.android.com/reference/android/app/Service.html#WhatIsAService