service的应用场景,以及和Thread的区别
开启service的两种方式以及区别
1、service是什么?
Service是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。
Service可以绑定Activity。
注意:Service和Broadcast都运行在主线程,都不能做长时间的耗时操作
另外:Android中服务跟后台是两个不同的概念
2、开启service的两种方式以及区别
1)startService:
即使Activity被销毁了,service仍可以正常运行,除非手动销毁。
被开启的service通过其他组件调用 startService()被创建。
这种service可以无限地运行下去,必须调用stopSelf()方法或者其他组件调用stopService()方法来停止它。
当service被停止时,系统会销毁它。
2)bindService:
多个Activity可以绑定同一个Service
被绑定的service是当其他组件(一个客户)调用bindService()来创建的。
客户可以通过一个IBinder接口和service进行通信。
客户可以通过unbindService()方法来关闭这种连接。
一个service可以同时和多个客户绑定,当多个客户都解除绑定之后,系统会销毁service。
3、service和Thread的区别?
1)service:运行在主线程中,如果需要在service需要做耗时操作的话,则需要开辟另外的线程;
那么为什么不直接在Activity中直接开启子线程?
因为Activity很难对子线程进行控制,特别是在Activity被销毁之后,没有办法获取之前已经创建的子线程实例,而Service来处理后台任务,Activity可以很方便的销毁和摧毁Service
2)Thread:运行在独立的线程中,更加独立
A 定义
Thread:是程序执行的最小单元,是放在CPU中的基本单位,可以执行一些耗时的异步操作
Service:Android中的一种特殊机制,运行在主线程中,不能做耗时操作,由系统进程进行托管,是一种轻量级的IPC通信
B 实际开发
Thread:例如,UI线程,子线程
Service:不可以做耗时操作,否则抛出ANR异常,没有UI,在后台运行
C 应用场景
Thread:请求网络,文件数据查询,以及阻塞UI等操作
service:不需要交互,比如播放音乐,开启数据统计
4、service的几个方法
onCreate
onBind
onStartCommand
onDestory