Aidl
2016-05-07 12:17
477 查看
1,创建aidl的文件
2,创建类继承service
3,声明:
创建客户端app
1,在客服端差创建文件夹,吧服务端的aidl文件拷贝到文件夹中。
88888888888888888888888888888888888888888888888888888888888888
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××
2:RemoteService。java
3,:XML文件;配置
2:MainActivity。java**
package com.sdingba.aidl interface ISDingBaAidl{ //计算2个数的和 int add(int num1,int num2); }
2,创建类继承service
IRemoteService extends Service{ @Override public IBinder onBind(Intent intent) { return new MiddlePerson(); } private IBinder iBinder = new ISDingBaAidl.Stub{ @Override public int add(int num1,int num2){ return num1+num2; } } }
3,声明:
<service android:name="com.sdingba.aidl.IRemoteService">
创建客户端app
1,在客服端差创建文件夹,吧服务端的aidl文件拷贝到文件夹中。
2,远程绑定的代码: Intent inten = new Intent(); //新版本必须 显示Intent显示绑定服务 intent.setComponent(new CompeoentName("com.sdingba.aidl","com.sdingba.aidl.IRemoteService")); bindService(intent,conn,Context.BIND_AUTO_CREATE);
3,创建conn
private ServiceConnection conn = new ServiceConnection(){ @Override public void onServiceConnected(){ //拿到了远程的服务 ISDingBaAidl issdingba = ISDingBaAidl.Stub.adInterface(service); } @Override public void onServiceDisconnected(){ issdingba = null;//回收资源 } }
3.调用函数
issdingba.add(num1,num2);
4,解除绑定
onDestroy(){ unbindService(conn); }
88888888888888888888888888888888888888888888888888888888888888
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××
服务app:
1:IMiddlePerson.aidlpackage com.sdingba.remoteservice; interface IMiddlePerson { /** * 调用服务里面的方法 */ void callMethodInService(); }
2:RemoteService。java
public class RemoteService extends Service { @Override public void onCreate() { System.out.println("远程服务被创建了。。。"); super.onCreate(); } @Override public void onDestroy() { System.out.println("远程服务被销毁了。"); super.onDestroy(); } @Override public IBinder onBind(Intent intent) { return new MiddlePerson(); } private void methodInService(){ System.out.println("我是远程服务的方法,我被调用了。。。。"); } //1.创建一个中间人 远程服务继承的是ipc的一个实现类 private class MiddlePerson extends IMiddlePerson.Stub{ @Override public void callMethodInService() { methodInService(); } } }
3,:XML文件;配置
<service android:name="com.sdingba.remoteservice.RemoteService"> <intent-filter > <!-- 为了方便别的程序用,所以定义一个action来使得别的程序可以调用 --> <action android:name="com.sdingba.remoteservice"/> </intent-filter> </service>
绑定服务app
**1,拷贝aidl文件到目录2:MainActivity。java**
public class MainActivity extends Activity { private MyConn conn; private IMiddlePerson iMp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /** * 绑定远程服务 * @param view */ public void bind(View view){ Intent intent = new Intent(); intent.setAction("com.sdingba.remoteservice"); conn = new MyConn(); bindService(intent, conn, BIND_AUTO_CREATE); } private class MyConn implements ServiceConnection{ @Override public void onServiceConnected(ComponentName name, IBinder service) { //得到的方式和刚才不同,这个为远程绑定、、得到服务 iMp = IMiddlePerson.Stub.asInterface(service); } @Override public void onServiceDisconnected(ComponentName name) { } } public void call(View view){ try { //调用到远程服务的方法。。在远程服务中写的方法 iMp.callMethodInService(); } catch (RemoteException e) { e.printStackTrace(); } } @Override protected void onDestroy() { unbindService(conn); super.onDestroy(); } }
相关文章推荐
- 为iPhone6设计自适应布局(二)
- 为iPhone 6设计自适应布局(一)
- Geoserver的ImageMosaic数据源添加以及服务发布
- Geoserver的ImageMosaic数据源添加以及服务发布
- 关于int main( int argc, char *argv[] )
- AIDL完全学习手册
- int main()还是void main()
- TurboMail邮件服务器资深技术支持杨工专访(一)
- 人工智能的新纪元——深度学习
- 011 Container With Most Water
- 使用 MailOtto 做完美预加载
- Maven Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean Failed to delete access_log
- jetbrains系列IDE-Vmoptions 优化指南
- INSTALL_FAILED_CPU_ABI_INCOMPATIBLE -- 使用Genymotion出现错误
- container_of()宏
- E: Some index files failed to download. They have been ignored, or old ones used instead.
- 介绍几款AI开源平台
- 分类器性能评估之Lift和Gain(3)
- HDU 1021 Fibonacci Again(找规律)
- IAR的STlink下载出现 Failed to set configuration with MCU name STM8S207MB: SWIM error [30006]:解决办法