绑定服务调用服务里的方法
activity绑定服务,等待服务被绑定成功后,返回服务里的内部类对象,activity在连接成功后拿到服务里的内部类对象,间接调用服务里的方法
A. 在activity中绑定服务
1 2 3 4 5 6 7 | intent = new Intent( this ,MyService. class ); mConn = new MyConn(); Log.i(TAG, "1. 在activity中绑定服务" ); bindService(intent, mConn, BIND_AUTO_CREATE); |
B. 服务被绑定成功
1 2 3 4 5 6 7 8 9 10 11 | @Override public IBinder onBind(Intent intent) { Log.e(TAG, "2. 服务被绑定成功" ); Log.e(TAG, "3. 在服务里创建一个内部类,在onBind方法中返给activity" ); return new Boss(); } |
C. 在服务里创建一个内部类,在onBind方法中返给activity
/**
* 服务里的内部类
* 非你莫属内部人员
*
1 2 3 4 5 6 7 8 9 | public class Boss extends Binder{ public void qianShouMM( int money){ if (money > 1000 ) { methodInService(); } else { Toast.makeText(MyService. this , "没钱该干嘛干嘛去" , 0 ).show(); } } } |
D. activity和Service连接成功了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /** * activity和Service的连接通道 */ private class MyConn implements ServiceConnection { @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.i(TAG, "4. activity和Service连接成功了" ); Log.i(TAG, "5. 把IBinder强转成服务里的内部类" ); mService = (Boss)service; } } |
E. 把IBinder强转成服务里的内部类
1 | mService = (Boss)service; |
F. 用服务里的内部类间接调用服务里的方法
1 | mService.Boss( 1000000 ); |
最后,关注【码上加油站】微信公众号后,有疑惑有问题想加油的小伙伴可以码上加入社群,让我们一起码上加油吧!!!
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步