何时使用服务或异步任务或处理程序?

有人能告诉我真正的区别吗?


答案 1

我的经验法则是,当我想做一些与单身有关的事情时,a是当我想做一些事情时,在开始的活动后继续进行,它是在后台进行的。AsyncTaskActivityService

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

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

如果您将 a 用于长时间运行的进程,您会发现,在您离开但是:AsyncTaskActivity

  • 如果在处理完成时在后台,则在尝试使用结果等更新 UI 时可能会遇到问题。Activity
  • 当背景需要内存时,它比.ActivityService

答案 2

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

底线:在大多数情况下,AsyncTask是你需要的。


推荐