安卓中service和intentService有什么区别?

24

在Android中,ServiceIntentService有什么区别?

在Android中,AsyncTaskIntentService有什么区别?

1个回答

35

1. Service和IntentService之间的区别

Service:它是Android服务的基类,可以扩展以创建任何服务。由于服务在UI线程中运行,因此需要创建一个工作线程来执行其工作。

IntentService:它是Service的一个子类,简化了您的工作。它已经在工作线程中工作,可以接收异步请求。因此,您不需要手动创建它,也不必担心同步问题。你只需简单地扩展它并重写方法:

onHandleIntent(Intent intent)

在这里,您可以管理所有传入的请求。

查看文档,您可以详细了解IntentService为您做了什么:

  • 创建一个默认的工作线程,独立于应用程序的主线程,并执行所有传递到onStartCommand()中的意图。
  • 创建一个工作队列,每次将一个intent传递到您的onHandleIntent()实现中,因此您不必担心多线程问题。
  • 在处理所有启动请求之后停止服务,因此您永远不必调用stopSelf()
  • 提供了一个默认的onBind()实现,返回null。
  • 提供了一个默认的onStartCommand()实现,将intent发送到工作队列,然后再传递到您的onHandleIntent()实现。

因此,如果您需要更多控制,则可以使用Service类,但是通常对于简单的服务,最佳解决方案是IntentService

2. AsyncTask和Service之间的区别

它们是两个不同的概念。

Service:可以被视为没有界面的Activity。它适用于长时间运行的操作。

AsyncTask:是一个特殊的类,封装了一个工作线程(执行后台操作),通过简化与UI线程的交互,而不需要直接管理线程或处理程序。


1
这里有很好的解释:https://dev59.com/bmUp5IYBdhLWcg3wGEgR#15772151 - Yohanim
这个解释很好,但如果您能更详细地介绍一下AsyncTask(特别是缺点),那就更好了。 - Mike Vella
关于AsyncTask有很多要说的,文档中也有相关介绍。我尝试简短地指出与Service的区别。 - GVillani82

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接