Android中Service和Activity相互通信示例代码

发布时间 - 2026-01-11 03:11:15    点击率:

前言

在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,本文就给大家详细介绍了关于Android中Service和Activity相互通信的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

Activity向Service通信

第一种方式:通过MyBinder方式调用Service方法

MainActivity

public class MainActivity extends Activity {

 private MyConn conn;
 private MyBinder myBinder;//我定义的中间人对象


 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 
 Intent intent = new Intent(this,BanZhengService.class);
 //连接服务 
 conn = new MyConn();
 bindService(intent, conn, BIND_AUTO_CREATE);
 
 }

 //点击按钮调用服务里面办证的方法
 public void click(View v) {
 
 myBinder.callBanZheng(10000000);
 
 }
 
 
 //监视服务的状态
 private class MyConn implements ServiceConnection{

 
 //当服务连接成功调用
 @Override
 public void onServiceConnected(ComponentName name, IBinder service) {
  //获取中间人对象
  myBinder = (MyBinder) service;
  
 }

 //失去连接
 @Override
 public void onServiceDisconnected(ComponentName name) {
  
 }}
 @Override
 protected void onDestroy() {
 //当activity 销毁的时候 解绑服务 
 unbindService(conn);
 super.onDestroy();
 }
 
}

BanZhengService

public class BanZhengService extends Service {

 //把我定义的中间人对象返回 
 @Override
 public IBinder onBind(Intent intent) {
 return new MyBinder();
 }

 
 //办证的方法
 public void banZheng(int money){
 if (money>1000) {
  Toast.makeText(getApplicationContext(), "我是领导 把证给你办了", 1).show();
 }else {
  Toast.makeText(getApplicationContext(), "这点钱 还想办事....", 1).show();
 }
 }
 
 
 //[1]定义中间人对象(IBinder)
 
 public class MyBinder extends Binder{
 
 public void callBanZheng(int money){
  //调用办证的方法
  banZheng(money);
 }
 
 }}

第二种方式:通过接口Iservice调用Service方法

MainActivity

public class MainActivity extends Activity {

 private MyConn conn;
 private Iservice myBinder;//我定义的中间人对象


 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 
 Intent intent = new Intent(this,DemoService.class);
 //连接服务 
 conn = new MyConn();
 bindService(intent, conn, BIND_AUTO_CREATE);
 
 }

 //点击按钮调用服务里面办证的方法
 public void click(View v) {
 
 myBinder.callBanZheng(10000000);
// myBinder.callPlayMaJiang();
// myBinder.callXiSangNa();
 
 }
 
 
 //监视服务的状态
 private class MyConn implements ServiceConnection{

 
 //当服务连接成功调用
 @Override
 public void onServiceConnected(ComponentName name, IBinder service) {
  //获取中间人对象
  myBinder = (Iservice) service;
  
 }

 //失去连接
 @Override
 public void onServiceDisconnected(ComponentName name) {
  
 }
 
 }
 @Override
 protected void onDestroy() {
 //当activity 销毁的时候 解绑服务 
 unbindService(conn);
 super.onDestroy();
 }
 
}

DemoService

public class DemoService extends Service {

 //把我定义的中间人对象返回 
 @Override
 public IBinder onBind(Intent intent) {
 return new MyBinder();
 }

 
 //办证的方法
 public void banZheng(int money){
 if (money>1000) {
  Toast.makeText(getApplicationContext(), "我是领导 把证给你办了", 1).show();
 }else {
  Toast.makeText(getApplicationContext(), "这点钱 还想办事....", 1).show();
 }
 }
 
 //打麻将的方法
 public void playMaJiang(){
 System.out.println("陪领导打麻将");
 }
 
 //洗桑拿的方法
 public void 洗桑拿(){
 System.out.println("陪领导洗桑拿");
 
 }
 
 
 
 
 //[1]定义中间人对象(IBinder)
 
 private class MyBinder extends Binder implements Iservice{
 
 public void callBanZheng(int money){
  //调用办证的方法
  banZheng(money);
 }
 
 public void callPlayMaJiang(){
  //调用playMaJiang 的方法
  playMaJiang();
  
 }
 
 public void callXiSangNa(){
  //调用洗桑拿的方法
  洗桑拿();
 }}}

接口Iservice

public interface Iservice {

 //把领导想暴露的方法都定义在接口里
 public void callBanZheng(int money);
// public void callPlayMaJiang();
 
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。


# activity  # service通信  # android  # activity通信  # service  # Android检测Activity或者Service是否运行的方法  # Android中Service与Activity之间通信的几种方式  # Android Activity与Service通信(不同进程之间)详解  # Android Activity 与Service进行数据交互详解  # 浅谈Android Activity与Service的交互方式  # Android使用Messenger实现service与activity交互  # Android实现Activity、Service与Broadcaster三大组件之间互相调用的方法  # Android实现从activity中停止Service的方法  # Android中Service实时向Activity传递数据实例分析  # android使用service和activity获取屏幕尺寸的方法  # 详解Android Service与Activity之间通信的几种方式  # 洗桑拿  # 我是  # 给你  # 把我  # 还想  # 办了  # 就会  # 相关内容  # 说了  # 不多  # 有一定  # 详细介绍  # 这篇文章  # 谢谢大家  # 就给  # 第二种  # 第一种  # 有疑问  # Override  # void 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现API资源集合?(Resource Collection教程)  如何在IIS中新建站点并配置端口与IP地址?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  长沙企业网站制作哪家好,长沙水业集团官方网站?  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  详解Android中Activity的四大启动模式实验简述  Android中AutoCompleteTextView自动提示  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  深圳网站制作的公司有哪些,dido官方网站?  如何快速上传建站程序避免常见错误?  微信公众帐号开发教程之图文消息全攻略  Bootstrap整体框架之CSS12栅格系统  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  如何在腾讯云免费申请建站?  Swift中循环语句中的转移语句 break 和 continue  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  佛山企业网站制作公司有哪些,沟通100网上服务官网?  如何在云主机快速搭建网站站点?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  Laravel中的Facade(门面)到底是什么原理  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  如何彻底卸载建站之星软件?  详解Huffman编码算法之Java实现  如何在阿里云购买域名并搭建网站?  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  php结合redis实现高并发下的抢购、秒杀功能的实例  Laravel如何创建自定义中间件?(Middleware代码示例)  实现点击下箭头变上箭头来回切换的两种方法【推荐】  轻松掌握MySQL函数中的last_insert_id()  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  Angular 表单中正确绑定输入值以确保提交与验证正常工作  网站制作软件免费下载安装,有哪些免费下载的软件网站?  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  如何基于云服务器快速搭建网站及云盘系统?  如何在万网ECS上快速搭建专属网站?  活动邀请函制作网站有哪些,活动邀请函文案?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  高防服务器:AI智能防御DDoS攻击与数据安全保障  Python文件流缓冲机制_IO性能解析【教程】  如何用5美元大硬盘VPS安全高效搭建个人网站?  昵图网官网入口 昵图网素材平台官方入口  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  焦点电影公司作品,电影焦点结局是什么?  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  Linux后台任务运行方法_nohup与&使用技巧【技巧】