service和后台线程的区别

来源:互联网 发布:linux删除子网卡 命令 编辑:程序博客网 时间:2024/06/06 08:48

很多人在遇到耗时操作引起的UI阻塞时都会问这样一个问题,何时使用service何时开一个后台线程来解决耗时操作问题。其实这句话本身就有误导,因为它默认了service和后台线程之间是互斥的。

首先,Android的主线程是在一个应用启动时而开启的单一线程,这个线程就被称为主线程或UI线程。需要注意的是UI线程并不只执行UI任务,所以我更愿意称它为主线程。而在执行其他任务时,它也负责启动application,比如调用application的onStart()方法。而被称为UI线程的理由也是因为耗时操作会阻塞用户界面,基于这个原因耗时操作应当在主线程之外的线程执行。

然后,后台线程和其他java程序一样,实现runnable传入thread执行,问题在于这个线程应当在哪里进行管理:activitiy的生命周期内和application的生命周期内。

Android的初学者普遍认为service是运行在不同的线程因为它被专门设计来执行后台任务。其实并非如此,默认地service将会在主线程被调用,而混淆的原因在于主线程常被称为UI线程而service应运行在后台。

最后,如果需要在service里面执行复杂的任务需要新起工作线程。也就是说,service不是一个可选的后台线程而仅仅提供了另外一个生命周期来运行工作线程。service的生命周期和前面所提的两个不同,service的使用场景是:1 该线程应当一直存活即使用户已经不会再有用户交互了。 2 其他应用使用intent启动该service。


http://cogitolearning.co.uk/?p=780

0 0
原创粉丝点击