线程的生命周期
1.新建
当创建Thread类的一个实例的时候这个线程就进入了新建状态 或者是未启动状态
2.就绪
线程启动 正在等待CPU发放时间片 也就是说现在线程还是在就绪状态中
3.运行
线程获得CPU 正在执行任务 就会调用 run方法
除非强行停止 或者更高级的线程阻拦 否则会一直运行到任务结束
4.死亡
线程执行完毕 或者被其他线程杀死 一旦死亡后就不会在进入就绪 和 运行状态
5.阻塞
由于某种原因 导致正在运行的线程让出CPU 会走阻塞状态
缺点:无法控制
如果我们退出Activity时 后台还是在继续执行这个线程的话 我们就需要用到了Service 服务 因为Service会一直运行在后台的
Service 是Android的一种机制 服务是运行在主线程上的 所以不能做耗时操作
Service生命周期
oncreate() onDestroy()只会执行一次
开启Service:
1.startService 开启服务
2.stopService 关闭服务(内部会调用onDestroy)
如果不执行这一步就算手动执行onDestroy()方法也不能停止服务
onCreate() - onStartCommand() - onDestroy()
绑定Service
1.bindService() 绑定服务
2.unBIndservice() 解绑服务 (内部调用onUnbind onDestroy() 销毁服务的操作)
onCreate() - onBind() - onUnbind() - onDestroy()
我们可以通过starServie启动一个服务 如果用户需要控制一些后台的洗的的话 我们就通过bindservice绑定这个服务 进行使用
注意: 如果只调用了stopService不会进行解绑 所有的客户端必须进行解绑服务unBIndservice()
启动服务 & 绑定服务的顺序
1.先绑定服务后启动服务
如果当前Service实例先绑定再启动服务时 那么绑定服务将会转为启动服务运行 无论是否销毁Activity 都不会影响这个服务的运行 只有收到销毁情况后才会销毁
2.先启动服务后绑定服务
如果当前Service实例先启动再绑定服务时
服务并不将会由启动服务转为绑定服务运行 还是会和我们的Activity绑定 服务依然是按照启动的生命周期运行 直到你调用了stopService才会销毁
1.启动服务优先级比绑定服务高
2.服务在其托管进程的主线程中运行(UI 线程)