绑定服务的用法
来源:互联网 发布:mac有没有助手 编辑:程序博客网 时间:2024/05/16 14:54
绑定服务的用途
- 服务有两种启动方法: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();}
0 0
- 绑定服务的用法
- Android中的Service的用法之绑定服务
- 绑定未绑定的服务
- 远程服务的绑定
- Android中的Service的用法 开启服务,下一篇讲绑定服务
- HyperLink的绑定用法
- HyperLink的绑定用法
- Messenger的基本用法(本质是跨APP的绑定服务)
- 服务的生命周期-绑定服务的生命周期
- 绑定服务的初步解读
- 编写绑定的 Service服务
- android 服务的绑定调用
- 绑定服务的注意事项小结
- 绑定服务&调用服务里面的方法
- 绑定服务:调用服务内部的方法
- andorid,绑定服务,调用服务的方法
- Android--绑定服务调用服务的方法
- Android---服务(Service)的绑定服务
- ARM 移植 PPPD
- d3d坐标系与绘制基本图元
- IOS学习总结--Android转IOS的福音
- 秒杀抢购思路以及高并发下数据安全
- Git如何切换远程仓库地址
- 绑定服务的用法
- HDU 1166 敌兵布阵 【线段树入门题,单点更新,结构题数组】
- 用root直接登入ubuntu 14_04
- servlet生命周期
- Unity开发HTC vive 五、拾取和触碰
- jpa或bernate使用原生sql进行关联查询org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join
- js屏蔽/过滤 特殊字符,输入就删除掉,实时删除,
- react native 实现动态高度Listview 和图文混排
- selenium-webdriver(python) (十)