【发布时间】:2018-01-13 02:28:45
【问题描述】:
Activity 可以使用 AsyncTask 或 Handler 框架进行后台工作。即使在用户离开启动它们的活动并且调用了活动的 onDestroy 之后,两者都将继续工作。换句话说,即使在其 GUI 关闭后,Activity 也完全能够执行后台工作。
在这种情况下,将 Service 用于后台工作似乎是多余的。服务带来了什么活动不能做的事情?谢谢。
【问题讨论】:
标签: android
Activity 可以使用 AsyncTask 或 Handler 框架进行后台工作。即使在用户离开启动它们的活动并且调用了活动的 onDestroy 之后,两者都将继续工作。换句话说,即使在其 GUI 关闭后,Activity 也完全能够执行后台工作。
在这种情况下,将 Service 用于后台工作似乎是多余的。服务带来了什么活动不能做的事情?谢谢。
【问题讨论】:
标签: android
什么是服务?
关于 Service 类的大部分困惑实际上都围绕着它不是什么:
因此,Service 本身其实很简单,主要提供两个功能:
Read the rest of the documentation for more info
因此,服务的一个实例是您希望在设定的时间间隔内自行发生的事情,而无需启动活动或其他任何事情来“启动”它。例如,SMSBackup 只是一个在后台运行的服务,每 X 分钟轮询一次您的 SMS 消息并将它们复制到 gmail 标签中,作为“备份”服务。
【讨论】:
Thread thread = new Thread() { @Override public void run() { try { while(true) { // network operation } } catch (InterruptedException e) { e.printStackTrace(); } } }; thread.start();还是使用AsyncTask?
当Activity显示的UI进入后台时(按home键),并不能保证Activity存在很长时间,框架可能会决定停止它。
【讨论】:
AsyncTask 允许您轻松执行 UI 更新,同时还可以清楚地分离 UI 线程和工作线程逻辑。但是,其他应用程序将无法访问您的 AsyncTask。在这种情况下,您需要这些服务。
【讨论】:
@BraynDenny 的回答已经够好了,我想换个角度解释一下。
首先你误解了后台任务的含义,服务的定义是即使应用程序不在前台,服务也会在后台持续运行,这里的后台不是指单独的线程,而是指与 Activity 不同,服务在您关闭应用程序时运行,默认情况下服务也在主线程中运行,如果您想要 异步服务使用 intentService
一个活动完全有能力做后台工作,即使在它完成之后 GUI 已关闭。
你所说的绝对是错误的。 Activity、Service 是 Android 的组件,但 AsyncTasks 或 Threads 不是组件 当您杀死一个活动时,该活动中的 Asynctask 也会被杀死,因为 Asynctask 实例是在活动类中创建的,但是当您开始使用 前台服务下载文件时,即使您关闭应用程序,就像Android中的音乐应用程序一样,即使您关闭应用程序,音乐仍然在后台播放,并显示前台通知
共有三种不同类型的服务,要了解更多信息,请查看此链接https://developer.android.com/guide/components/services.html#CreatingBoundService
【讨论】: