一、摘要
开启一个Service服务播放音乐,MusicPlayerActivity退出后,音乐继续,除非结束Service服务,一个精致的音乐播放器,如下图:
二、项目结构
三、Service和BroadcastReceiver
创建一个服务,你必须创建一个Service的子类,在实现方法里,你需要重写服务生命周期重要的一些回调的方法,同时为组件绑定到服务提供一个机制,你需要重写的最重要的回调方法:
onStartCommand()
当另外一个组件(比如:activity)请求启动服务时,调用startService()后回调onStartCommand()方法。一旦执行该方法,服务被启动和在后台运行无限地运行。任务执行完成后,调用stopServie()或stopSelf()停止服务。
onBind()
当另外一个组件想要绑定一个服务,调用bindService()。在实现的方法里,必须提供用户和服务交流的接口,返回一个IBinder。Service子类中必须实现该方法,如果你不想绑定服务,只需要返回null即可。
onCreate()
当服务第一次被创建的时候,回调该方法,执行一次创建进程(这个过程在回调onStartCommand()或onBind()之前),如果服务已经在运行,不会回调该方法。
onDestroy()
当服务不在使用和准备销毁时回调该方法。在Service的子类中必须实现该方法清除占用的资源,比如:Thread、注册的监听器、接收器等,这是最后被回调的方法。
启动服务的两种方式
一个组件调用startService()启动服务(结果回调onStartCommand()),然后服务直到调用stopSelf()或stopService()才停止运行。
如果一个组件调用bindService()方法创建服务(onStartCommand()不会被回调),服务在组件绑定后开始运行,一旦服务解绑,系统就会销毁,即回调onDestroy()。
BroadcastReceiver
广播的使用比较简单,如果哪里不明白的,可以留言交流点击“搜索”,输入“BroadcastReceiver”查看对应内容,推荐阅读《Android广播注册两者方式》
四、分析音乐播放器的BroadcastReceiver
在该Demo中,在MusicService注册了一个ServiceReceiver,控制音乐的停止与播放;在MusicPlayerActivity注册了一个ActivityReceiver,改变按钮的图标。在这里需要明白,注册广播的目的就是拦截指定的“秘密”消息,根据“飞鸽传信”的内容确定“进攻”还是“防守”。发送广播的代码如下:
- Intent sendIntent = new Intent("cn.com.sgmsc.MusicPlayer.update");
- sendIntent.putExtra("musicupdate", 1);//存放数据
- sendBroadcast(sendIntent);//发送广播
注册广播的代码如下:
- ActivityReceiver activityReceiver = new ActivityReceiver(); //创建BroadcastReceiver
- IntentFilter filter = new IntentFilter(); //创建IntentFilter过滤器
- filter.addAction("cn.com.sgmsc.MusicPlayer.update");//添加Action
- registerReceiver(activityReceiver, filter); //注册监听
你可能感兴趣的文章
转载请注明出处: https://www.teachcourse.cn/1695.html ,谢谢支持!