博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 开发之 bindService() 通信
阅读量:6575 次
发布时间:2019-06-24

本文共 1992 字,大约阅读时间需要 6 分钟。

Service 启动方式有两种

  • startService(intent)
  • bindService(intent,conn,Context.BIND_AUTO_CREATE)

startService(intent)

  生命周期: onCreate()-  >onStartCommand()->startService()->onDestroy()

  该方法启动service,会执行一个onStartCommand()的方法,所以一些操作可以放在 onStartCommand() 中进行处理。

bindService(intent,conn,Context.BIND_AUTO_CREATE)

  生命周期:onCreate()->onBind()->onUnbind()->onDestroy()

  绑定启动 service,

使用该方法启动 service 分为几步

1.在 Service 中,重写 onBind() 方法,返回一个 iBinder 对象。

1     @Override2     public IBinder onBind(Intent arg0) {3         // TODO Auto-generated method stub4         Log.d("learnservice", "绑定服务...");5         return new MyBinder();6     }

2.新建 BinderService 类继承 Service ,在 BindService 类里新建内部类 MyBinder 继承Binder ( Binder 实现 IBinder 接口)。该类中实现一些与 service 通信的方法,比如 setData()方法。

1     public class MyBinder extends Binder{2         public void setData(String data){3             MyService.this.data=data;4         }5     }

3.在 Activity 里,实例化 ServiceConnection 接口的实现类,重写 onServiceConnected() 和 onServiceDisconnected() 方法。

1 ServiceConnection conn=new ServiceConnection() { 2          3         @Override 4         public void onServiceDisconnected(ComponentName name) { 5             // TODO Auto-generated method stub 6              7         } 8          9         @Override10         public void onServiceConnected(ComponentName name, IBinder service) {11             // TODO Auto-generated method stub12             binder=(MyBinder) service;   //该binder,需要在activity中声明。13             Log.d("learnservice", "绑定服务conn...");14         }15     };

4.使用 button 的 onClick() 或者 activity 的 onCreat() 等触发 bindService() 方法

1     @Override2     public void onClick(View v) {3         intent = new Intent(MainActivity.this,MyService.class);4         bindService(intent, conn, Context.BIND_AUTO_CREATE); 5     }

5.在 activity 中声明 service中的binder

1 private MyService.MyBinder binder;

6.同时把该 binder 放在 serviceConnection 的 onServiceConnection() 方法中

1 binder=(MyBinder) service;

这样,就完成了 Activity 和 Service 通过 bindService() 方法绑定并通信。

转载地址:http://lhrjo.baihongyu.com/

你可能感兴趣的文章
FireFox不支持InnerText的解决方法
查看>>
jsp打印
查看>>
从类开始
查看>>
iOS中真机连接电脑运行程序出现问题
查看>>
java安卓如何实现定义接口
查看>>
Union大小
查看>>
南邮CTF--bypass again
查看>>
函数的渐近增长
查看>>
动态参数
查看>>
FirewallD常用命令及设置
查看>>
Slight difference between C++ and C
查看>>
c++类的嵌套(1)
查看>>
Android SqlLite数据库的创建、增、删、改、查、使用事务
查看>>
phpStorm无法使用svn1.8的解决办法
查看>>
Talk is cheap,show me the code
查看>>
[Java]知乎下巴第3集:来人啊快把知乎的答案装到篮子里去
查看>>
解决中文乱码的问题
查看>>
前端异常测试
查看>>
JSON与localStorage的爱恨情仇
查看>>
input验证码框,输入非数字或非12位时,红框提示;每4位加一个空格
查看>>