android开发心得四

来源:互联网 发布:域名哪里买 编辑:程序博客网 时间:2024/05/21 10:22

1.service服务:android官方文档阅读:一个应用组件,可以在后台进行后台操作,不会有一个主界面,不是一个线程,不是一个线程。
研究一下service:command+o-----command+f12-----command+shift+a --查找一个内部类方法。
service能长时间保存在后台,比Activity有跟高的优先级,不到万不得已系统不会被杀死它(在音乐服务中最常见)
这里写图片描述
开始创建一个service的Activity,完成内部必要接口的实现:
2.service有2种方式:
启动服务Started---Bound绑定一个服务
实现方法:onCreate----onStartCommand(也可以用onStarte,但是被弃用)----onDestory:
这里写图片描述
3.音乐服务的具体实现:(在activity_main.xml中设置跳转按钮,在MainActivity里进行监听设计,去mianfest文件中注册)
首先要一个转跳到该播放页面的MiusicButtonActivity--里面实现控件的设计,监听等
-----找到布局文件中的2个具体按钮:
这里写图片描述
-----stopService和startService是继承Context里的方法,可以直接调用:
这里写图片描述
其次一个布局文件activity_music_button(里面设计样式)——里面实现音乐界面的样式:
这里写图片描述
再次有一个自定义服务类TestService(MusicService)进行逻辑的设计(里面一系列的方法,接口的实现,类封装优化等,注意任何service都要在androidManifest中注册才能生效)----实现一个音乐播放器:
首先MusicService创建一个MediaPlayer对象:
这里写图片描述
接着在onCreat方法里用create方法(里面有2个参数一个Context,另一个uri地址id)进行初始化:
这里写图片描述
接着由于方法是本地文件播放需要创建本地文件夹raw(里面放东西才能生成索引)存放资源:
这里写图片描述
最后在service的生命流程中调用相应的方法:
这里写图片描述
发现一个问题,进程杀不死?---(学会研究onStratCommand去android develop官网阅读官方api,或者去stackoverflow.com搜索API等,翻墙)

return一个int型的值,那么究竟是哪个值呢?---
这里写图片描述
这里写图片描述
大致意思就是这个属性,会使系统有压力的时候,杀死这个服务。

3.上面讲了start的用法,下面看看Bind(绑定)的使用:
首先了解一下service的生命周期:
这里写图片描述
4.利用Bind和Binder(有一套很好的机制)来让MusicService和MusicButtonActivity进行沟通:
Start的方式是启动服务,但是Activity要与Service进行绑定就需要在MusicActivity中new一个ServiceConnection对象同时实现2个内部接口的方法(实现利用Binder把service和Activity联系起来)这里就需要一个ServiceConnect对象:
这里写图片描述
----------------------------------------------------------
首先要在MusicService里写一个方法LocalBinder,在里面写一个方法返回MusicService:
这里写图片描述
在创建一个LocalBinder的对象(继承Binder--又实现Binder的接口):
这里写图片描述
在onBind方法里,把LocalBinder对象返回到MusicButtonActivity里:
这里写图片描述
----------------------------------------------------------

————在onServiceConnected:把从MusicService接收过来的Binder强转成MusicService,从而获取mMusicService对象
这里写图片描述
----创建好对象之后就可以进行bindService绑定:
这里写图片描述
这里写图片描述
这只是绑定操作,只是用于Activity要与Service进行绑定,从而达到获取数据的目的

-----启动音乐服务必须要:
这里写图片描述
这里写图片描述
-----------这样就可以在MusicService中获取数据:
这里写图片描述
这里写图片描述

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

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

老样子先创建一个TestIntentService,继承IntentService完成接口方法:
这里写图片描述
-----onHandleIntent里面有一个intent从那里传过来的呢?原来是在startService里面传过来一堆intent,在这里排序,和处理:
这里写图片描述
-----异步处理有个工作队列这个队列(像个MessageQune),处理intent数据:
这里写图片描述
调用stopSelf方法,结束进程。
-----做一个同步操作,就要使用IntentService(排队领书)

0 0
原创粉丝点击