绑定服务调用本地服务中的方法
如果想调用服务中的方法, 通过startService()是做不到的, 这时需要用bindService来解决.
下面的demo是在Activity中调用Service中的自定义方法---methodInService
这个demo可以解决在项目开发中调用service里的数据。
这里在service中使用到了代理模式。这是为了,给service组件和activity组件中间添加一个中间人。
通过代理来传递数据。也就是binder对象。这个代理就是接口IService
Service中的代码如下:
1 public class DemoService extends Service { 2 3 /** 4 * 内部的小蜜,可以调用服务内部的方法 5 * 将小蜜私有了,建一个接口,提供对外访问的方法 6 */ 7 private class Xiaomi extends Binder implements IService{ 8 //通过这个方法调用服务中的方法 9 //重写接口中的抽象方法 10 public void callMethodInService(int money){ 11 if(money > 100){ 12 //这里调用了服务里的方法 13 methodInService(); 14 }else{ 15 System.out.println("这点钱还想办事啊?"); 16 } 17 } 18 19 public void 洗桑拿(){ 20 System.out.println("一起洗桑拿"); 21 } 22 } 23 24 /** 25 * 在执行bindService时调用该方法 26 * IBinder相当于内部的小蜜 27 */ 28 @Override 29 public IBinder onBind(Intent intent) { 30 System.out.println("2,服务如果成功绑定,会执行onBind方法,返回IBinder小蜜"); 31 return new Xiaomi(); 32 } 33 34 @Override 35 public void onCreate() { 36 System.out.println("服务已经开启了"); 37 38 } 39 40 @Override 41 public void onDestroy() { 42 System.out.println("服务已经关闭了"); 43 super.onDestroy(); 44 } 45 46 /** 47 * 服务中的方法 48 */ 49 public void methodInService(){ 50 System.out.println("6,你成功调用了服务中的方法"); 51 } 52 53 }
IService接口代码如下:
1 public interface IService { 2 3 public void callMethodInService(int money); 4 5 }
Activity中的代码如下:
1 public class MainActivity extends Activity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 } 8 9 MyConn conn; 10 //创建接口的对象 11 IService myBinder; 12 13 //绑定服务 14 public void bindService(View view) { 15 System.out.println("1,绑定服务"); 16 Intent intent = new Intent(this, DemoService.class); 17 conn = new MyConn(); 18 bindService(intent, conn, BIND_AUTO_CREATE); 19 } 20 21 //解绑服务 22 public void unbindService(View view) { 23 24 unbindService(conn); 25 } 26 27 /** 28 * 调用服务里的方法 29 */ 30 public void callService(View view) { 31 //通过内部的小蜜可以间接调用服务里的方法 32 System.out.println("5,利用myBinder间接调用服务里的方法"); 33 myBinder.callMethodInService(500); 34 } 35 36 37 /** 38 * 服务成功连接的通讯频道 39 */ 40 private class MyConn implements ServiceConnection{ 41 42 //服务成功连接时 43 @Override 44 public void onServiceConnected(ComponentName name, IBinder service) { 45 System.out.println("3,得到了服务的链接,获取到了小蜜"); 46 myBinder = (IService) service; 47 System.out.println("4,将IBinder强制转换为小蜜myBinder"); 48 } 49 50 //服务连接不成功时 51 @Override 52 public void onServiceDisconnected(ComponentName name) { 53 54 } 55 } 56 }
关键代码已经用红色标出
在这个demo中, Activity想直接调用服务中的方法是办不到的, 于是可以定义一个代理Iservice接口,
让Service中的内部类Xiaomi来实现该接口, 并重写抽象方法, 这样就可以在Activity中调用了.
转载于:https://www.cnblogs.com/wanghaoyuhappy/p/5293696.html
绑定服务调用本地服务中的方法相关推荐
- centos7 搭建本地git_本地服务调用K8S环境中的SpringCloud微服务实战
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:原创文章分类汇总及配套源码,涉及Java.Docker.K8S.Devops等 下图是典型的微 ...
- docker的接口 外部如何访问k8s_本地服务调用K8S环境中的SpringCloud微服务实战
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:原创文章分类汇总及配套源码,涉及Java.Docker.K8S.Devops等 下图是典型的微 ...
- dubbo+zk+apollo微服务,联调调用本地服务
今天遇到个好玩的事情,和前端联调.每次查出的结果不一样,swagger测试的结果也不一样.debug后,有好几次不进入断点 啥情况?我没改吗.可是有时候查询结果又是对的. 后来,才反应过来.部署了测试 ...
- SpringCoud - 基础入门(服务注册与发现、服务调用、服务降级与熔断篇)
SpringCloud:是一系列框架的有序集合,也是一套完整的微服务解决方案.利用SpringBoot的开发便利巧妙的简化了分布式系统基础设施的开发,如发现注册.配置中心.消息总线.负载均衡.断路器. ...
- 【Groovy】闭包 Closure ( 闭包中调用 Groovy 脚本中的方法 | owner 与 delegate 区别 | 闭包中调用对象中的方法 )
文章目录 一.闭包中调用 Groovy 脚本中的方法 二.owner 与 delegate 区别 三.闭包中调用 Groovy 对象中的方法 一.闭包中调用 Groovy 脚本中的方法 在 Groov ...
- java 调用cpp_java jni 调用cpp文件中的方法 | 学步园
这里说下最近修改nutch的源码碰到的调用cpp文件中的方法. 刚刚开始的时候,想直接在fetch.java中直接写jni接口.后来发现这样会留下不好的编程习惯.自己动手在fetch下写一个类.Hel ...
- 原生微信小程序父组件调用子组件中的方法
假设子组件中写有方法getData() // 返回数据 getData() {let flag = this.onStartValidate();if (!flag) return falselet ...
- JSP中调用java类中的方法
JSP中调用java类中的方法 1.新建一个项目,在src文件夹下添加一个包:如:test 2.再在包中添加一个类:如 package test; public class conDatabase { ...
- 星星之火-50:无意中发现一种能够把网络视频下载到本地计算机中的方法
目前,随着移动互联网的盛行,网络中充斥着各种大量的视频,但大多数情况下,我们智能通过客户端观看视频,无法把视频文件下载到本地,最笨的方法就是录屏. 然后,一个偶然的机会,无意中发现一种能够把网络视频下 ...
最新文章
- BeetleX.Http.Clients V1.5发布
- python 把数据写到tet_Python随身听023基础知识到底哪里用逗号?
- MySql数据库导出完整版(导出数据库,导出表,导出数据库结构)
- C++循环的内存释放问题?
- C#基础-Func,Action
- qt银行排队系统服务器代码,基于qt的银行排队系统
- 已知相关系数求解联合分布律
- as常用固定搭配_四年级英语单词详解:as的固定搭配.doc
- 降压恒流 LED 驱动器
- 解决onenote同步速度慢问题
- 云计算Linux运维——Linux系统——软件管理
- 鼓励自己最有效的10个方法
- 温州又一知名企业宣布倒闭破产
- TIOBE 11 月编程语言排行榜:Rust 在 Top 20 站住脚!
- 笨木头的Unity3d常用操作介绍
- CSAPP - LAB 1 datalab
- 判断两个数是否互为素数
- html打开d盘文件,为什么ie浏览器打不开c/d盘的html文件,直接跳出保存
- 商标行业有什么发展前景
- git提交代码被拒推送