绑定服务的用法
2017-01-06 15:56
169 查看
绑定服务的用途
服务有两种启动方法:startService和bindService。startService启动服务后,即使启动他的组件死亡,服务仍然会在后台运行;bindService启动服务后,服务与启动他的组件同生共死。
既然如此,绑定服务似乎就好像失去了服务本来的意义(后台单独运行的进程)。实际上绑定服务最大的用途就是其他进程可以去调用服务里的方法,而这是startService无法做到的。
下面介绍绑定服务的用法:我们模拟做一个音乐播放服务,服务里有开始播放和停止播放的方法需要其他的进程去调用。
代码示例
public class MainActivity extends Activity { MusicInterface mi; private MusicServiceConnection conn; private Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent = new Intent(this, MusicService.class); startService(intent); conn = new MusicServiceConnection(); bindService(intent, conn, BIND_AUTO_CREATE); } class MusicServiceConnection implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { mi = (MusicInterface) service; } @Override public void onServiceDisconnected(ComponentName name) { } } public void play(View v) { mi.play(); } public void stop(View v) { mi.stop(); } }
主activity我们放置了两个按钮:开始播放和停止播放,点击相应的按钮就可以实现相应的功能(注意这里的方法是绑定服务里的方法)。
activity启动时绑定服务,在链接到服务后将服务转成抽象接口,接口里是服务里定义的可以外部进程直接调用的方法。
public class MusicService extends Service { @Override public void onCreate() { super.onCreate(); System.out.println("onCreate"); } @Override public IBinder onBind(Intent intent) { System.out.println("onBind"); return new MusicController(); } @Override public boolean onUnbind(Intent intent) { System.out.println("onUnbind"); return super.onUnbind(intent); } @Override public void onDestroy() { super.onDestroy(); System.out.println("onDestroy"); } class MusicController extends Binder implements MusicInterface{ @Override public void play() { MusicService.this.play(); } @Override public void stop() { MusicService.this.stop(); } } public void innerMethod(){ System.out.println("我是外部进程不能访问的方法"); } public void play() { System.out.println("开始播放"); } public void stop() { System.out.println("停止播放"); } }
绑定服务要求返回一个Buider对象,这个对象相当于一个暴露服务里方法给外部进程的中介,这里我们让这个对象实现接口,接口里定义一些允许访问的方法。
public interface MusicInterface { void play(); void stop(); }
相关文章推荐
- ARM 移植 PPPD
- 秒杀抢购思路以及高并发下数据安全
- nginx的日志切割
- centOS 下redis 集群安装
- 日常总结
- Android通用网络请求解析框架.5(使用框架)
- github在readme.md里添加图片
- 嵌入式开发中常见3个的C语言技巧
- 常用排序之冒泡排序-------笔记
- JAVA多线程
- carousel(Bootstrap)
- 百度地图开发时:只显示灰色的网格而不显示具体地图信息的解决办法
- Hello Blog!
- TAG-9F10 发卡行相关数据(转)
- cookie欺骗
- linux常见配置
- C3P0和dbutils数据库连接池封装的使用(一)
- OC修改webView里面的html的文字大小
- oc 制造假数据
- springMVC处理ajax请求时的404