播客第一天 android之 aidl(一)

声明:本博文只对aidl的简单讲解,不作为深入理解,仅供新手使用。不喜勿喷!


华丽的分割线

----------------------------------------------------------------------------------------

开篇,今天我们来讲解下android进程间通信最为重要,也是最麻烦的一种方式-service。

什么是aidl:aidl是 Android Interface definition language的缩写,一看就明白,“接口定义语言”。

它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口。

废话少说接下来讲解下他的使用:

服务端========================================================

第一步:

在项目中创建一个包,命名aidl;

在包里新建一个文件,后缀为.aidl;

里面第一句和java里面一样导入包名;

下面 声明接口 和接口名称,名称要和定义好的adil文件对应;

在接口里面定义好方法。ok 如图。





这样 一个aidl就创建好了。

ps:编译你的aidl文件,这个只要是在eclipse中开发,你的adt插件会像资源文件一样把aidl文件编译成java代码生成在gen文件夹下,不用手动去编译






第二步:

打开系统生成的java文件,我们会发现一个Stub类(存根的意思):public static abstract class Stub extends android.os.Binder implements com.hoo.test.aidl.MyAIDLService,我们需要实现接口方法,下面是我在例子中实现的Stub类:

客户端现在做的任务是,创建一个service(继承service类),在里面来返回一个stub的实例,即:new Stub。



在minafest里来配置我们的service 并指定好action。

此时我们的服务端就基本完成了。


-------------------------------------------------------------------------分割线-------------------------------------------------------------------------


客户端:

创建一个项目 testAct

将服务端的MyAIDLService按原路径copy到我们的客户端项目中,如图:


接下来是我们具体页面的操作。

在调用AIDL服务之前需要先使用bindService方法绑定AIDL服务。bindService方法需要一个ServiceConnection对象。ServiceConnection有一个onServiceConnected方法,当成功绑定AIDL服务且,该方法被调用。并通过service参数返回AIDL服务对象。(该句引用)


public class MainActivity extends Activity {
private MyAIDLService myStub;
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
if (service != null) {
myStub = MyAIDLService.Stub.asInterface(service);
}
try {
// 调用AIDL服务对象中的getValue方法,并以对话框中显示该方法的返回值
new AlertDialog.Builder(MainActivity.this).setMessage(0)
.setPositiveButton("确定", null).show();
} catch (Exception e) {
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
myStub = null;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}


public void btn_ok(View v) {
Bundle args = new Bundle();
Intent intent = new Intent("come.hoo.test.service.AIDLServiceImpl");
intent.putExtras(args);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);


}

运行ok!!!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值