Android中服务和线程的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mingC0758/article/details/81808142

线程
线程始于.start()方法,终止于运行run()方法运行结束或者线程所在进程的结束。

服务
服务始于Context.startService()方法或者bindService()方法,终止于stopService()或unbindService()
image

一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。

Android四大基本组件介绍与生命周期

通过startService()方法启动的服务于调用者没有关系,即使调用者关闭了,服务仍然运行,想停止服务要调用Context.stopService(),此时系统会调用onDestory(),使用此方法启动时,服务首次启动系统先调用服务的onCreate()–>onStart(),如果服务已经启动再次调用只会触发onStart()方法

使用bindService()启动的服务与调用者绑定,只要调用者关闭服务就终止,使用此方法启动时,服务首次启动系统先调用服务的onCreate()–>onBind(),如果服务已经启动再次调用不会再触发这2个方法,调用者退出时系统会调用服务的onUnbind()–>onDestory(),想主动解除绑定可使用Contex.unbindService(),系统依次调用onUnbind()–>onDestory();

进程优先级

  • 开启了前台服务的进程成为前台进程(Service.startForeground())
  • 开启了普通服务,进程里所有Activity都处于后台,则成为服务进程
  • 开启了线程,但没有开启服务,而且所有Activity处于后台,此时进程成为后台进程

进程优先级:前台进程 > 服务进程 > 后台进程

note

  • 后台服务会随着app的退出而退出
  • 前台服务在app退出后仍然在运行
  • 服务进程比后台进程优先级高
  • 服务比线程更方便控制
  • Service的onCreate、onBind、onStartCommand运行在主线程中,可以在Service中开启子线程

IntentService

  • IntentService 是继承于 Service 并处理异步请求的一个类,在 IntentService 内有一个工作线程来处理耗时操作,启动 IntentService 的方式和启动传统 Service 一样,同时,当任务执行完后,IntentService 会自动停止,而不需要我们去手动控制。
  • 另外,可以启动 IntentService 多次,而每一个耗时操作会以工作队列的方式在IntentService 的 onHandleIntent 回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个,以此类推。

猜你喜欢

转载自blog.csdn.net/mingC0758/article/details/81808142