aidl英文全写:Android inteface define language,

下面是一个简单的例子通过aidl实现进程间通信

1.创建一个服务端工程,包名为com.test.service

在源文件下创建一个IMyservice.aidl文件,在eclipse开环境下会自动生成IMyservice.java.

package com.test.service;
interface ImyServiceManager{

String callBack();
void setMessage(String str);
}

2.编写一个aidl 的服务类,具体如下

package com.test.service;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.widget.Toast;

public class MyServiceManager extends Service {

@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return new MyServiceManagerImpl();
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
Log.i("debug", "service create-------------");
super.onCreate();
}

//实现接口定义
public class MyServiceManagerImpl extends ImyServiceManager.Stub{

@Override
public String callBack() throws RemoteException {
// TODO Auto-generated method stub
String str="this message from service";
return str;
}

@Override
public void setMessage(String str) throws RemoteException {
// TODO Auto-generated method stub
Log.i("debug", "this isfrom client msg"+str);
}

}

}

2.创建客户端调用

新建一个工程,包名com.test.client

把服务端下的gen目录下的包复制到客户端src目录下。创建一个Activity调用服务端

package com.test.client;

import com.test.ImyServiceManager;

import android.app.Activity;
import android.app.Service;
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.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class AidlClientActivity extends Activity {
/** Called when the activity is first created. */
ImyServiceManager service;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bindService(new Intent("com.test.myservicemanager"), connection, BIND_AUTO_CREATE);//绑定服务端

Button but=(Button)findViewById(R.id.button1);
but.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
try {
Toast.makeText(getApplicationContext(), service.callBack(), Toast.LENGTH_LONG).show();
service.setMessage("客户端调用");
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
});

}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
}
private ServiceConnection connection=new ServiceConnection() {

@Override
public void onServiceDisconnected(ComponentName arg0) {
// TODO Auto-generated method stub
Log.i("debug", "-------disconnected--------");

}

@Override
public void onServiceConnected(ComponentName arg0, IBinder binder) {
// TODO Auto-generated method stub
Log.i("debug", "-------connected--------");
service=ImyServiceManager.Stub.asInterface(binder);
}
};
}

至此两个进程客户端与服务端即可完成通讯,注意,客户端调用之前,服务端服务必须已经在系统中注册过

更多相关文章

  1. Android(安卓)使用HTTPClient调用Web请求(查询手机号码区域)
  2. android如何使webview不跳到自带的浏览器上
  3. Mac下Android(安卓)iperf网络测试
  4. 细读《深入理解 Android(安卓)内核设计思想》(五)Binder 机制 [下]
  5. bitmap设置图片尺寸缩小,避免内存溢出/OutOfMemoryError的优化方
  6. Android之Searchable
  7. android怎么用APK调用JNI简单实例
  8. Android的接口定义语言(aidl)
  9. Android面试常客之Handler全解

随机推荐

  1. sql server几种Join的区别测试方法
  2. SQL Server 获取服务器时间的sql语句
  3. SQL Server 创建约束图解(唯一 主键)
  4. SQLServer主键和唯一约束的区别
  5. SQL Server 2016正式版安装配置过程图文
  6. SQL Server 2016 CTP2.2安装配置方法图文
  7. SQL Server中参数化SQL写法遇到parameter
  8. MySQL 及 SQL 注入与防范方法
  9. sql server 2012 备份集中的数据库备份与
  10. SQL Server2016正式版安装配置方法图文教