aidl
2013-12-24 17:13
99 查看
aidl:android interface definition language 安卓接口定义医院
远程服务是运行在另外一个进程里面
调用者是运行在一个进程里面
远程服务 修改:
1.把.java改为.aidl
没有public private修饰符
2.自动生成一个IService.java接口文件
3.继承IService.Stub
1.创建与之一样的包名
把aidl文件拷贝过来
2.
编译器自动生成的
不同进程可以传递数据
IPC implementation
inter process communication:进程间通讯
远程服务和本地服务方法调用的异同:
本地服务 一般定义一个 Iservice.java接口
远程服务 定义一个Iservice.aidl远程接口 修改文件扩展名 删除访问的修饰符
本地服务 开启可以采用显示意图
远程服务 开启采用隐士意图 定义action
本地服务 中间人 MyBinder extend Binder implements IService接口
远程服务 中间人 MyBinder extend (自动生成) IService.stub (IPC实现)
本地服务 获取中间人 onServiceConnected(ComponentName name,IBinder service)
吧service做一个强制类型转 IService的类型
远程服务 获取中间人 onServiceConnected(ComponentName name,IBinder service)
利用 IService.Stub.asInterface();得到远程接口的一个代理对象
远程服务
IService.aidl
调用服务的工程
1.创建与之一样的包名
把aidl文件拷贝过来
远程服务是运行在另外一个进程里面
调用者是运行在一个进程里面
远程服务 修改:
1.把.java改为.aidl
没有public private修饰符
2.自动生成一个IService.java接口文件
3.继承IService.Stub
1.创建与之一样的包名
把aidl文件拷贝过来
2.
编译器自动生成的
不同进程可以传递数据
IPC implementation
inter process communication:进程间通讯
远程服务和本地服务方法调用的异同:
本地服务 一般定义一个 Iservice.java接口
远程服务 定义一个Iservice.aidl远程接口 修改文件扩展名 删除访问的修饰符
本地服务 开启可以采用显示意图
远程服务 开启采用隐士意图 定义action
本地服务 中间人 MyBinder extend Binder implements IService接口
远程服务 中间人 MyBinder extend (自动生成) IService.stub (IPC实现)
本地服务 获取中间人 onServiceConnected(ComponentName name,IBinder service)
吧service做一个强制类型转 IService的类型
远程服务 获取中间人 onServiceConnected(ComponentName name,IBinder service)
利用 IService.Stub.asInterface();得到远程接口的一个代理对象
远程服务
IService.aidl
package com.itheima.remoteservice; interface IService { void callMethodInService(); }
package com.itheima.remoteservice; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; import android.os.RemoteException; public class RemoteService extends Service { @Override public IBinder onBind(Intent intent) { System.out.println("远程服务 onbind"); return new MyBinder(); } //1.把接口 .java文件 扩展名改为.aidl //2. 自动生成一个IService.java接口文件 //3. 继承 IService.Stub private class MyBinder extends IService.Stub{ @Override public void callMethodInService() throws RemoteException { methodInService(); } } @Override public void onCreate() { System.out.println("远程服务 oncreate"); super.onCreate(); } @Override public void onDestroy() { System.out.println("远程服务 ondestroy"); super.onDestroy(); } @Override public boolean onUnbind(Intent intent) { System.out.println("远程服务 onunbind"); return super.onUnbind(intent); } public void methodInService(){ System.out.println("我是远程服务里面的方法....我被调用了....."); } }清单文件中
<service android:name="com.itheima.remoteservice.RemoteService" > <intent-filter> <action android:name="com.itheima.remoteservice"/> </intent-filter> </service>
调用服务的工程
1.创建与之一样的包名
把aidl文件拷贝过来
package com.itheima.callremoteservice; import com.itheima.remoteservice.IService; import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; import android.view.View; public class MainActivity extends Activity { private Intent intent ; private MyConn conn; private IService iService; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent = new Intent(); conn = new MyConn(); intent.setAction("com.itheima.remoteservice"); } private class MyConn implements ServiceConnection{ @Override public void onServiceConnected(ComponentName name, IBinder service) { iService = IService.Stub.asInterface(service); } @Override public void onServiceDisconnected(ComponentName name) { } } public void start(View view) { startService(intent); } public void stop(View view) { stopService(intent); } public void bind(View view) { bindService(intent, conn, BIND_AUTO_CREATE); } public void unbind(View view) { } public void call(View view) { try { iService.callMethodInService(); } catch (RemoteException e) { e.printStackTrace(); } } }
相关文章推荐
- Android:远程服务Service(含AIDL & IPC讲解)
- Android:学习AIDL,这一篇文章就够了(上)
- Android 使用AIDL跨进程通信(二)--传递自定义对象
- AIDL学习(一)---IPC通讯
- Aidl测试心得
- android AIDL : 你真的理解AIDL中的in,out,inout么?
- Android AIDL之in out inout
- ITelephony.aidl 在android studio中的使用
- Android Service和AIDL用处
- android_59_service_aidl调用远程服务
- Android开发之---AIDL
- 四大组件之Service_AIDL
- IPC-AIDL的使用实例和分析
- 进程之间的通信AIDL
- 安卓漫漫路之AIDL传递简单数据.
- 别人问你AIDL,我来给你回答
- Android:学习AIDL笔记整理
- service和aidl的区别
- Android 进程间通信AIDL讲解 一
- Android Studio 创建AIDL以及Binder 原理