Android的四大组建Service 简单、易懂的解析
2016-08-10 22:41
288 查看
Android的四大组建Service 简单、易懂的解析
Service 服务:四大组件之一
特性: 没有界面运行在后台,除了界面相关的之外,Activity能做的Service也能做。
service的生命周期:
上图所述一共有两种服务,一种是直接通过意图打开的服务 与打开的应用无关,第二种为跟应用绑定在一块的服务。程序死了 服务也就跟着死了。
声明要素
1. 声明一个类继承Service
2.在清单文件中声明
开启服务:
涉及的生命周期:
onCreate ---- > onStartCommand()
注意:
1. 第一次开启服务的时候会调用onCreate()onStartCommand().
如果服务已经开启再次调用startService(),不会开启新的服务对象,只会调用已经开启的服务的onStartCommand()方法。
2. startService()方法开启的服务,在界面关闭之后服务依然存在,下次开启一个新的界面调用startService(),依然不会打开新的服务,只会调用当前服务的onStartCommand()。
3. 通过startService()开启的服务,只能通过stopService()关闭。
注意: startService()跟stopService()不一定要在同一个界面中调用。
关闭服务:
生命周期:
onDestroy()
2.3 把Activity中的数据传递给Service
Activity:
Service:
2.4 Service传递消息给Activity
场景描述:
a.在Activity中除界面相关的部分,其他代码代码功能也能在Service执行。
b.Activity一旦被关闭,对象就销毁,对象一旦销毁保存的数据也就消失,下次再打开就一个新对象。
c.Activity关闭但是Service还在,Service不会受到Activity关闭的影响。
需求:
当Activity关闭的时候把Activity上的信息保存到Service中,因为Service不会关闭,然后下次打开新的Activity从Service上把信息读取回来,显示在Activity上,让用户认为界面还是一样。
问题:
startService()开启的服务可以运行在后台,并且可以接收Activity传递的消息,但是无法获取Service中保存的信息。
解决: 绑定服务
生命周期:
onCreate() onBinde()
注意:
1. 绑定成之后再次绑定没有效果
2.绑定成功之后Service的生命周期就跟Activity绑定在一起了,
一旦Activity关闭Service也随之销毁。
3.Activity关闭之前如果没有解除绑定的话,会造成绑定泄漏,所以一般在Activity关闭之前会解除绑定
2.4.2 解除绑定
生命周期:
onUnBind() onDestroy()
注意:1.通过bindService()开启并绑定的服务,一旦调用unBindService()解除绑定,Service就销毁掉。
2. 如果已经解除绑定再次解除绑定就会异常
2.4.3 Activity跟Service之间的消息传递:
Activity ----> Service:
Activity:
Service:
在onBind()中接收
Service -----> Activity
步骤:
1. MyService这个类中有一个成员变量:String msg
我们希望在Activity上可以显示这个数据
所以的把MyService上的数据传递到Activity上
2. 在绑定的时候,如果绑定成的化,调用Service中onBind()要求传递一个IBinder类型对象的引用,给Activity中ServiceConnection中的onServiceConnection()方法。
3.IBinder是一个接口,所以我们可以在MyService中声明一个内部类MyBinder 继承Binder(Binder实现IBinder接口),因为MyBinder是MyService的内部类所以可以调用MyService的成员变量,又因为MyService是我们自己声明所以我们新增方法以及成员变量,通过新增方法去调用MyService的成员变量。
onBind()要返回一个IBinder类型的对象的引用我们就给他一个MyBinder对象的引用。
4.绑定成功之后,onBind()返回的IBinder类型对象的引用会在调用ServiceConnection类型的对象的onServiceConnected方法传入,因为我们ServiceConnection声明成Activity的内部类所以可以在这个方法中调用MyBinder对象的方法获取对应的数据,并显示在Activity上
问题:
通过绑定可以获取Service上保存的信息,但是绑定Service的话Activity关闭Service也随之关闭,信息也就销毁。
我们想要实现是消息可以保存在Service中,并且也能从Service中获取消息。
解决:
分析:
a.bindService()帮服务可以获取服务信息,但是Activity关闭Service也关闭
b.startService()虽然无法返回信息,但是activity关闭service依然存在,必须通过stopService关闭。
先通过startService()开始服务,然后再去bindService()绑定服务。
好处: 先startService()开启服务,只要没有stopService()服务就一直在,这样就可以用于保存信息。
再通过bindService()去绑定已经开启的服务也可以获取信息,当界面关闭的时候只会解除绑定不会销毁Service,下次再开启界面可以通过绑定再获取信息。
------------------------------基本的服务就介绍完整了-------------------------
有时候要这两种服务配合使用。 接下来的实例是 模仿一个音乐播放器进行
1.
.在Activity开启的时候获取播放器对象并操作
一般在onStart() 中
先startService(),在bindService()
一般在onStop()中解除绑定
界面关闭之前解除绑定不会绑定泄漏
2.
在每次打开界面绑定的时候去获取Service中保存的MediaPlayer对象的引用给Activity
在Myservice中声明一个内部类新增一个方法用于返回Service中成员变量MediaPlayer的引用
下面会贴出代码下载地址 :
Demo
相关文章推荐
- Android的四大组建Activity 简单、易懂的解析
- Android 四大组件之Service解析
- Android四大基本组件——Service完全解析
- android四大组件-service全面解析一
- Android四大组件之Service(服务)简单总结
- Android四大组件:Service服务史上最全面解析
- [Android知识体系]之四大组件:service(完全解析下)
- 黑马程序员-Android基础四大组建Service
- android四大组件---Service的简单使用
- Android源码解析四大组件系列(一)---Service的启动过程分析
- Android四大组件完全解析(二)---Service
- Android四大应用构件之Service解析
- Service简单总结(android四大主键之一)
- [Android知识体系]之四大组件:service(完全解析上)
- Android四大组件之Service解析
- Android四大组建之Service
- android四大启动模式简单易懂版
- android四大组建之Service
- Android四大组件之 Service
- Android四大组件之 Service