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与&使用技巧【技巧】

