1.service服务:android官方文档阅读:一个应用组件,可以在后台进行后台操作,不会有一个主界面,不是一个线程,不是一个线程。

研究一下service:command+o-----command+f12-----command+shift+a --查找一个内部类方法。

service能长时间保存在后台,比Activity有跟高的优先级,不到万不得已系统不会被杀死它(在音乐服务中最常见)

android 的服务端代码 android服务端开发_android开发


开始创建一个service的Activity,完成内部必要接口的实现:

2.service有2种方式:

启动服务Started---Bound绑定一个服务

实现方法:onCreate----onStartCommand(也可以用onStarte,但是被弃用)----onDestory:

android 的服务端代码 android服务端开发_异步处理_02


3.音乐服务的具体实现:(在activity_main.xml中设置跳转按钮,在MainActivity里进行监听设计,去mianfest文件中注册)

首先要一个转跳到该播放页面的MiusicButtonActivity--里面实现控件的设计,监听等

-----找到布局文件中的2个具体按钮:

android 的服务端代码 android服务端开发_android 的服务端代码_03


-----stopService和startService是继承Context里的方法,可以直接调用:

android 的服务端代码 android服务端开发_android开发_04


其次一个布局文件activity_music_button(里面设计样式)——里面实现音乐界面的样式:

android 的服务端代码 android服务端开发_异步处理_05


再次有一个自定义服务类TestService(MusicService)进行逻辑的设计(里面一系列的方法,接口的实现,类封装优化等,注意任何service都要在androidManifest中注册才能生效)----实现一个音乐播放器:

首先MusicService创建一个MediaPlayer对象:

android 的服务端代码 android服务端开发_android开发_06


接着在onCreat方法里用create方法(里面有2个参数一个Context,另一个uri地址id)进行初始化:

android 的服务端代码 android服务端开发_android_07


接着由于方法是本地文件播放需要创建本地文件夹raw(里面放东西才能生成索引)存放资源:

android 的服务端代码 android服务端开发_获取数据_08


最后在service的生命流程中调用相应的方法:

android 的服务端代码 android服务端开发_异步处理_09


发现一个问题,进程杀不死?---(学会研究onStratCommand去android develop官网阅读官方api,或者去stackoverflow.com搜索API等,翻墙)return一个int型的值,那么究竟是哪个值呢?---

android 的服务端代码 android服务端开发_异步处理_10


android 的服务端代码 android服务端开发_获取数据_11


大致意思就是这个属性,会使系统有压力的时候,杀死这个服务。3.上面讲了start的用法,下面看看Bind(绑定)的使用:

首先了解一下service的生命周期:

android 的服务端代码 android服务端开发_android开发_12


4.利用Bind和Binder(有一套很好的机制)来让MusicService和MusicButtonActivity进行沟通:

Start的方式是启动服务,但是Activity要与Service进行绑定就需要在MusicActivity中new一个ServiceConnection对象同时实现2个内部接口的方法(实现利用Binder把service和Activity联系起来)这里就需要一个ServiceConnect对象:

android 的服务端代码 android服务端开发_android 的服务端代码_13


----------------------------------------------------------

首先要在MusicService里写一个方法LocalBinder,在里面写一个方法返回MusicService:

android 的服务端代码 android服务端开发_获取数据_14


在创建一个LocalBinder的对象(继承Binder--又实现Binder的接口):

android 的服务端代码 android服务端开发_异步处理_15


在onBind方法里,把LocalBinder对象返回到MusicButtonActivity里:

android 的服务端代码 android服务端开发_android 的服务端代码_16


----------------------------------------------------------————在onServiceConnected:把从MusicService接收过来的Binder强转成MusicService,从而获取mMusicService对象

android 的服务端代码 android服务端开发_android 的服务端代码_17


----创建好对象之后就可以进行bindService绑定:

android 的服务端代码 android服务端开发_android开发_18


android 的服务端代码 android服务端开发_android_19


这只是绑定操作,只是用于Activity要与Service进行绑定,从而达到获取数据的目的-----启动音乐服务必须要:

android 的服务端代码 android服务端开发_android_20


android 的服务端代码 android服务端开发_异步处理_21


-----------这样就可以在MusicService中获取数据:

android 的服务端代码 android服务端开发_异步处理_22


android 的服务端代码 android服务端开发_android_23

注意想要获取数据必须要按照:startService---bindService,unbindService——stopService流程,bindService传入一个mServiceConnect相当于传入一个连接,在unbindService解绑的时候也要用到它。目的绑定MusicService和MusicButtonActivity,。如果不unbindService,那么stopService是没用的。如果Activity界面被销毁了,那么用unbindService里的Destory方法,这样才能销毁后台服务。

4.IntentService是一个异步处理的service。(相当于一个队列)
Looper:把消息往消息队列里拉还是塞?是管理者
Handler:处理消息,定时的
同步执行:我这里做,那边在等我,一次执行
异步处理:你去干你的事,我去干我的事,你干完了,给我个通知就行

老样子先创建一个TestIntentService,继承IntentService完成接口方法:

android 的服务端代码 android服务端开发_异步处理_24


-----onHandleIntent里面有一个intent从那里传过来的呢?原来是在startService里面传过来一堆intent,在这里排序,和处理:

android 的服务端代码 android服务端开发_获取数据_25


-----异步处理有个工作队列这个队列(像个MessageQune),处理intent数据:

android 的服务端代码 android服务端开发_获取数据_26


调用stopSelf方法,结束进程。