为什么将Service用于后台任务?

时间:2010-11-02 14:42:23

标签: android

活动可以使用AsyncTask或Handler框架进行后台工作。即使用户已经离开启动它们的活动并且已经调用了活动的onDestroy,两者都将继续工作。换句话说,即使在GUI关闭后,活动也完全能够进行后台工作。

在这种情况下,将Service用于后台工作似乎是冗余。服务带来了什么活动无法做到的表格?感谢。

4 个答案:

答案 0 :(得分:8)

什么是服务?

关于Service类的大多数混淆实际上都围绕着它不是:

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

因此,服务本身实际上非常简单,提供两个主要特征:

  • 应用程序的工具,用于告诉系统它想要在后台执行的操作(即使用户没有直接与应用程序交互)。这对应于对Context.startService()的调用,该调用要求系统为该服务安排工作,直到该服务或其他人明确停止该服务为止。
  • 应用程序的工具将其某些功能公开给其他应用程序。这对应于对Context.bindService()的调用,它允许对服务进行长期连接以便与服务进行交互。

Read the rest of the documentation for more info

因此,服务的一个实例将是您希望在设定的时间间隔内发生的事情,而无需启动活动或其他任何“启动”它。例如,SMSBackup只是一种在后台运行的服务,每隔X分钟轮询一次您的SMS消息并将它们复制到gmail标签中,作为“备份”服务。

答案 1 :(得分:0)

当Activity显示的UI进入后台时(按主页按钮),不能保证Activity长时间存在,框架可能会决定停止它。

答案 2 :(得分:0)

AsyncTask允许您轻松执行UI更新,同时还可以清楚地分离UI线程和工作线程逻辑。但是,其他应用程序将无法访问您的AsyncTask。在这种情况下,您需要这些服务。

答案 3 :(得分:0)

@BraynDenny答案已经足够好了,我想从另一个角度来解释。

首先你误解了后台任务的含义,服务的定义说服务连续在后台运行,即使应用程序不在前台,这里的术语背景并不意味着单独的线程,它意味着如果你想要异步服务使用intentService ,那么关闭应用程序时服务会像Activity一样运行,服务默认在主线程中运行

  

即使在活动完成后,活动也完全能够进行后台工作   GUI已关闭。

你说的是绝对错误的。 活动,服务是Android的组件,但AsyncTasks或Threads不是组件 当你杀死一个活动时,活动中的Asynctask也会被杀死,因为Asynctask实例是在活动类中创建的,但当你开始使用前台服务下载文件时,即使你在关闭应用程序,就像Android中的音乐应用程序一样,即使您关闭应用程序,音乐仍然在后台播放,显示前景通知

有三种不同类型的服务,要了解有关它们的更多信息,请查看此链接https://developer.android.com/guide/components/services.html#CreatingBoundService

相关问题