【问题标题】:difference between asyntask and service in androidandroid中asynctask和service的区别
【发布时间】:2015-04-10 07:57:45
【问题描述】:

我是一个Android编程的初学者,当我学习一些关于Service的东西时,问题就变成了。 我们都知道UI线程不能运行长时间的进程,所以我们应该在一个新的线程中运行它们,并且立即,我们已经认识到关于Handler AsyncTask和Service的一些东西甚至在任务完成时发送一个BroadCast。但是,我不确定何时使用它们。

比如我们经常使用一个activity来登录,当数据要post的时候,可能post到远程服务器上,可能会花费很长时间,我们不能在LoginActivity中写一些东西,可能在AsyncTask或者Service中这样做。但是哪个是更好的选择?

【问题讨论】:

标签: android service android-asynctask handler


【解决方案1】:

一般来说:

  • 服务在后台运行,并为 你。例如,如果您想每 15 次从 REST-API 获取新闻 分钟并在应用程序内或通过通知通知用户 而不是使用服务。
  • AsyncTask 是用于工作密集型作业的独立线程 防止 UI 线程阻塞。例如获取消息后 用户点击“获取新闻”按钮。

在您的情况下,用户的期望很重要。用户尝试登录并在活动中等待服务器的响应。您应该在 AsyncTask 中将请求发送到服务器,例如在响应出现之前向用户显示等待屏幕(“尝试登录”)。所以 UI 仍然是响应式的,但用户清楚地知道,他必须等待响应。

【讨论】:

    【解决方案2】:

    服务一直在您设备的后台运行。

    AsynkTack 在您需要时启动并在后台执行。完成后,线程被销毁。

    【讨论】:

    • 所以 Service 试图提供应用程序始终需要的东西,而 AsyncTask 提供的结果比 Service 更短?
    • 实际上,服务通常用于让任务始终在后台运行,而异步任务是准时任务。查看这篇文章,解释得很好:stackoverflow.com/questions/3264383/…
    【解决方案3】:

    Services - Service 是一个应用程序组件,可以在后台执行长时间运行的操作,它不提供用户界面。服务是没有 UI 的任务。始终在主线程上运行,也可以阻塞 main thread.我们可以通过调用startService()方法来启动服务

    AysnTask - AsyncTask 类允许在后台运行指令并再次与主线程同步。它还报告正在运行的任务的进度。用于并行任务。我们通过调用方法execute()来启动它。在工作线程上工作并从主线程触发。它不能循环运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多