service和后台线程的区别
2015-01-20 10:47
134 查看
很多人在遇到耗时操作引起的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
首先,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
相关文章推荐
- 后台线程与前台线程在运行性能上有什么区别
- 【线程】线程的前后台的运行区别
- android的线程(Thread)和服务(Service)的区别
- android中通过本地service处理事务和通过新开线程处理事务的区别
- 在Service中新开线程和直接新开线程的区别与意义
- 后台线程访问 Spring bean 配置的 hassin,rmi service的方法
- 关于service和线程的区别
- 如何检查Android后台服务线程(Service类)是否正在运行
- 判断Android后台服务线程(Service类)是否正在运行
- Start Service 和 Bound Service, 两者的区别, 以及和线程进程的区别
- c#前台线程与后台线程的区别和联系
- 在Service中新开线程和直接新开线程的区别与意义
- .Net中后台线程和前台线程的区别
- 前台线程和后台线程的区别
- C# 前台线程与后台线程的区别和联系
- 前台线程和后台线程的区别
- C#.Net前台线程与后台线程的区别
- 如何检查Android后台服务线程(Service类)是否正在运行
- android的线程(Thread)和服务(Service)的区别
- c#前台线程与后台线程的区别和联系