Android Service初步学习的笔记
2016-09-23 10:11
351 查看
1.Service的应用场景
条件:a.并不依赖于用户可视化界面(不是绝对的,如前台service就是与notification界面结合使用的)
b.具有较长时间的运行特性。
service的应用场景有很多,如:
当用户离开音乐应用时,Music playback以Service运行;
当后台文件正在下载时它以Service实现;
Google应用维持一个Service来从网络中获取推送服务;
当一些特殊的数据同步需要进行时,Sync adapters以Service运行于后台;
活动壁纸以Service运行于后台;
2.service的基本用法
a.启动的两种方式
通过startService启动
通过bindService启动
两种启动方式的区别
通过startService启动的,就跟Activity无关了,在其它地方也可以关闭
通过bindService启动的,是和Activity绑定的,Activity挂了,它就挂了
b.生命周期
![](https://images2015.cnblogs.com/blog/827075/201609/827075-20160923093951059-2070087905.png)
service积极活动的生命时间(active lifetime)是从onStartCommand()或onBind()被调用开始,它们各自处理由startService()或 bindService()方法传过来的Intent对象。
如果service是被开启的,那么它的活动生命周期和整个生命周期一同结束。
如果service是被绑定的,它们它的活动生命周期是在onUnbind()方法返回后结束。
注意:尽管一个被开启的service是通过调用 stopSelf() 或stopService()来停止的,没有一个对应的回调函数与之对应,即没有onStop()回调方法。所以,当调用了停止的方法,除非这个service和客户组件绑定,否则系统将会直接销毁它,onDestory()方法会被调用,并且是这个时候唯一会被调用的回调方法。
c.创建了几个实例?
不管调用多少次都只有1个实例,因为只走了一个oncreate方法。
在启动(startService)的时候不要忘了在某一个地方给他停止(StopService)
同样在绑定(bindService)的时候,也要在后面给他解绑(onUnbind)
3.Service跟Activity通信
通信方式
继承Binder类
这个方式只有当你的Acitivity和Service处于同一个Application和进程时,才可以用,比如你后台有一个播放背景音乐的Service,这时就可以用这种方式来进行通信。在Service里定义一个内部类,Binder的子类,通过这个类,把Service的对象传给Activity,这样Activity就可以调用Service里的公用方法和公用属性了,但这种方式,一定要在同一个进程和同一个Application里。
使用Messenger
上面的方法只能在同一个进程里才能用,如果要与另外一个进程的Service进行通信,则可以用Messenger。
其实实现IPC的方式,还有AIDL,但推荐使用Messenger,有两点好处:
1. 使用Messenger方式比使用AIDL的方式,实现起来要简单很多
2. 使用Messenger时,所有从Activity传过来的消息都会排在一个队列里,不会同时请求Service,所以是线程安全的。如果你的程序就是要多线程去访问Service,就可以用AIDL,不然最好使用Messenger的方式。
使用AIDL
这个方法略,如果知道上面两种方法,这个方法基本很少会用到。
4.Service和Thread的关系
Service和Thread的关系:一毛钱关系都没有
Service和Thread的区别:
正常情况下Service运行于主线程,Thread是一个子线程
Service的优先级高于挂起的Activity,也高于Activity所创建的Thread
Thread的生命周期
在Activity中被创建:Thread的生命周期即为整个Activity的生命周期
在Application中被创建:Thread的生命周期即为整个Application的生命周期
在Service中被创建:这是保证Thread最长生命周期的唯一方式,只要Service不退出,Thread就一直在后台执行
条件:a.并不依赖于用户可视化界面(不是绝对的,如前台service就是与notification界面结合使用的)
b.具有较长时间的运行特性。
service的应用场景有很多,如:
当用户离开音乐应用时,Music playback以Service运行;
当后台文件正在下载时它以Service实现;
Google应用维持一个Service来从网络中获取推送服务;
当一些特殊的数据同步需要进行时,Sync adapters以Service运行于后台;
活动壁纸以Service运行于后台;
2.service的基本用法
a.启动的两种方式
通过startService启动
通过bindService启动
两种启动方式的区别
通过startService启动的,就跟Activity无关了,在其它地方也可以关闭
通过bindService启动的,是和Activity绑定的,Activity挂了,它就挂了
b.生命周期
![](https://images2015.cnblogs.com/blog/827075/201609/827075-20160923093951059-2070087905.png)
service积极活动的生命时间(active lifetime)是从onStartCommand()或onBind()被调用开始,它们各自处理由startService()或 bindService()方法传过来的Intent对象。
如果service是被开启的,那么它的活动生命周期和整个生命周期一同结束。
如果service是被绑定的,它们它的活动生命周期是在onUnbind()方法返回后结束。
注意:尽管一个被开启的service是通过调用 stopSelf() 或stopService()来停止的,没有一个对应的回调函数与之对应,即没有onStop()回调方法。所以,当调用了停止的方法,除非这个service和客户组件绑定,否则系统将会直接销毁它,onDestory()方法会被调用,并且是这个时候唯一会被调用的回调方法。
c.创建了几个实例?
不管调用多少次都只有1个实例,因为只走了一个oncreate方法。
在启动(startService)的时候不要忘了在某一个地方给他停止(StopService)
同样在绑定(bindService)的时候,也要在后面给他解绑(onUnbind)
3.Service跟Activity通信
通信方式
继承Binder类
这个方式只有当你的Acitivity和Service处于同一个Application和进程时,才可以用,比如你后台有一个播放背景音乐的Service,这时就可以用这种方式来进行通信。在Service里定义一个内部类,Binder的子类,通过这个类,把Service的对象传给Activity,这样Activity就可以调用Service里的公用方法和公用属性了,但这种方式,一定要在同一个进程和同一个Application里。
使用Messenger
上面的方法只能在同一个进程里才能用,如果要与另外一个进程的Service进行通信,则可以用Messenger。
其实实现IPC的方式,还有AIDL,但推荐使用Messenger,有两点好处:
1. 使用Messenger方式比使用AIDL的方式,实现起来要简单很多
2. 使用Messenger时,所有从Activity传过来的消息都会排在一个队列里,不会同时请求Service,所以是线程安全的。如果你的程序就是要多线程去访问Service,就可以用AIDL,不然最好使用Messenger的方式。
使用AIDL
这个方法略,如果知道上面两种方法,这个方法基本很少会用到。
4.Service和Thread的关系
Service和Thread的关系:一毛钱关系都没有
Service和Thread的区别:
正常情况下Service运行于主线程,Thread是一个子线程
Service的优先级高于挂起的Activity,也高于Activity所创建的Thread
Thread的生命周期
在Activity中被创建:Thread的生命周期即为整个Activity的生命周期
在Application中被创建:Thread的生命周期即为整个Application的生命周期
在Service中被创建:这是保证Thread最长生命周期的唯一方式,只要Service不退出,Thread就一直在后台执行
相关文章推荐
- Service 初步 -- MarsChen Android 开发教程学习笔记
- Android 学习 笔记_11. Service初步
- Android开发学习笔记:Service的简介和启动方式
- android service 服务学习笔记
- Android 学习笔记 Service 启动
- Android Service学习笔记
- android bind service 学习笔记
- Android开发学习笔记:Service的远程调用
- android service的学习笔记
- android bind service 学习笔记
- Android 初步学习BroadCast与Service实现简单的音乐播放器
- Android Service学习笔记
- Android 学习笔记 Service (一) Local Service
- Android开发学习笔记-9 Service基础
- Android Service学习笔记
- android 学习笔记 Activity 和service 的启动过程
- Android学习--Service初步
- Android应用开发学习笔记(2)应用开发初步体验
- Android Service学习笔记
- Android开发学习笔记:Service的简介和启动方式