淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(六)

时间:2023-03-08 16:05:16
淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(六)

Service和Thread的关系

不少初学者都可能会有这样的疑惑,Service和Thread到底有什么关系呢?什么时候应该用Service,什么时候又应该用Thread?

答案是Service和Thread之间没有任何关系!

Service 是在后台运行的,但是它运行在主线程中,Service无法直接和UI进行交互,我们只有通过接口回调和广播机制(下一节将介绍广播机制)来实现对UI的操作;

Thread 是用于开启一个子线程,执行一些耗时操作不会阻塞主线程的运行;

举个例子:

某些应用程序可能需要去下载一个耗时的文件,我们可以使用Service来实现。你可能又会问,前面不是刚刚验证过Service是运行在主线程里的么?那下载过程总难道不会阻塞主线程的运行吗?当然会,但是我们可以在Service中再创建一个子线程,然后在这里去处理耗时逻辑就没问题了。既然在Service里也要创建一个子线程,那为什么不直接在Activity里直接开一个子线程去下载呢?我们需要知道Activity很对Thread控制不是很容易的,如果Activity被销毁之后,就没有任何其它的办法可以再重新获取到之前创建的子线程的实例。而且在一个Activity中创建的子线程,另一个Activity无法对其进行操作。但是Service就不同了,所有的Activity都可以与Service进行关联,然后可以很方便地操作其中的方法,即使Activity被销毁了,之后只要重新与Service建立关联,就又能够获取到原有的Service中Binder的实例。因此,使用Service来处理后台任务,Activity就可以放心地finish,完全不需要担心无法对后台任务进行控制的情况。

刚才,我们提到广播机制的问题,下一节,我们将讲解广播机制的内容。

转载请注明http://www.cnblogs.com/yushengbo,否则将追究版权责任!