Android进程通信之AIDL Demo
来源:互联网 发布:python中的join函数 编辑:程序博客网 时间:2024/06/03 16:55
AIDL文件
package com.test.aidltestservice;//包名,注意ADIL文件在工程中的存放位置要与包名一致// Declare any non-default types here with import statementsinterface IMyAidlInterface {//接口名 /** * Demonstrates some basic types that you can use as parameters * and return values in AIDL. */ String myAidlTest();//提供进程间调用的方法}
注:服务端和客户端都需要该文件,并且文件名和存放路径必须相同
服务端
创建类继承Service
public class AIDLRemoteService extends Service { public final String TAG = this.getClass().getSimpleName(); /* * Service生命周期方法 */ @Override public void onCreate() { super.onCreate(); Log.i(TAG, "onCreate"); } @Override public void onDestroy() { Log.i(TAG, "onDestroy"); super.onDestroy(); } /* * 创建AIDL服务Binder */ private IMyAidlInterface.Stub mBinder = new IMyAidlInterface.Stub(){ @Override public String myAidlTest() throws RemoteException {//ADIL文件中定义的方法名 return "Hello AIDL test"; } }; /* * Binder方法重载 */ @Override public IBinder onBind(Intent intent) { Log.i(TAG, "onBind"); return mBinder; } @Override public boolean onUnbind(Intent intent) { Log.i(TAG, "onUnbind"); return super.onUnbind(intent); }}
服务端AndroidManiest.xml
<service android:name="com.coship.aidltestservice.AIDLRemoteService"> <intent-filter> <action android:name="aidltestservice.AIDLRemoteService"/> </intent-filter></service>
注:action android:name 才是客户端绑定时初始化话Intent的名称,而不是service name
客户端
public class ClientMainActivity extends Activity{ public final String TAG = this.getClass().getSimpleName(); private IMyAidlInterface mConnectIMyAidlInterface;//通过该实例调用AIDL方法 private final static AIDL_INTENT_NAME= "aidltestservice.AIDLRemoteService"; @Override protected void onCreate(Bundle savedInstanceState) { Log.i(TAG,"onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_client_main); mContext = this; bindAidlService(); } @Override protected void onResume() { Log.i(TAG,"onResume"); try{ String string = mConnectIMyAidlInterface.myAidlTest();//调用AIDL接口,返回的是"Hello AIDL test" } catch (RemoteException e){ Log.w(TAG, "服务调用失败"); } } private void bindAidlService(){ Intent intent = new Intent(AIDL_INTENT_NAME); boolean ret = bindService(intent, mConnection, Context.BIND_AUTO_CREATE); Log.i(TAG, "创建AIDL链接是否成功:"+ret); } private ServiceConnection mConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder binder){ mConnectIMyAidlInterface = IMyAidlInterface.Stub.asInterface(binder); } @Override public void onServiceDisconnected(ComponentName componentName) { mConnectIMyAidlInterface = null; } };}
注意事项:
1、客户端与服务端都要包含同一套AIDL文件,并且路径相同;
2、服务端AndroidManiest.xml必须定义service和,否则绑定不成功;
3、客户端绑定Binder的名称为service的action android:name而不是AIDL的包名或者service name
阅读全文
0 0
- Android进程通信之AIDL Demo
- Android进程间通信AIDL的demo
- Android 进程通信之AIDL
- Android进程通信之AIDL
- Android 进程通信之AIDL
- Android之aidl进程通信
- Android服务之Service(AIDL进程间通信)及demo(重要!)
- Android之AIDL(进程间通信)
- Android之AIDL(进程间通信)
- android进程间通信(IPC)之AIDL
- Android 进程间通信之AIDL service
- Android 进程间通信之AIDL
- Android进程间通信(IPC)之AIDL
- Android进程间通信之--AIDL
- android 进程间通信之aidl
- android 进程通信之aidl 自定义数据类型
- Android进程间通信之AIDL
- Android 进程通信机制之 AIDL
- 分享原创python爬取微信公众号,并分享GITHUB地址
- Spring3.1.0实现原理分析(十).AOP代理对象执行拦截过程
- [iOS]小问题记录
- ListView相关知识点
- eclipse启动weblogic控制台显示乱码问题
- Android进程通信之AIDL Demo
- Ubuntu14.04安装Ruby2.2方法
- 集合遍历与迭代器注意事项--Java基础075
- 关于初学者上传文件到github的方法
- C语言程序设计(27)
- 我的保研之路
- 如何彻底的删除MySQL数据库
- BF Calculator CodeForces
- 过滤器:eq()和:nth-child()的差异