AIDL简介
AIDL (Android Interface Definition Language) 是一种IDL 语言,用于生成可以在Android设备上两个进程之间进行进程间通信(interprocess communication, IPC)的代码。如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)对象的操作,就可以使用AIDL生成可序列化的参数。
AIDL IPC机制是面向接口的,像COM或Corba一样,但是更加轻量级。它是使用代理类在客户端和实现端传递数据。
AIDL如何使用呢?
一、创建一个studio,这是个服务端项目,然后创建AIDL文件夹
二、只会会弹出下图界面,点击finish即可
三、这个时候文件目录中就会有一个AIDL文件夹,如下图:
四、在这个文件夹中,我们创建一个AIDL接口类,如下图:
五、会弹出一个下面图片的界面,让你输入aidl的命名:
六、创建成功后效果如下:
七、在这个接口我随便先定义一个接口,把默认的先删除:
String getvalue(String s);
上面的七步,就创建好了AIDL相关接口类,下面我们来写代码
一,先创建一个AIDLServer类,并继承Server。
二,上图中所有的代码都实现了,就可以引用到我们aidl中的接口了。
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.annotation.Nullable;
/**
* Created by ENZ on 2016/10/21.
*/
public class AIDLServier extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return iBinder;
}
//创建一个
IBinder iBinder = new MyAidl.Stub(){
@Override
public String getvalue(String s) throws RemoteException {
return "随便返回一个值";
}
};
}
三,最重要的一步,配置清单文件。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.com.yanshi">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".AIDLServier"
android:exported="true"
android:process=":remote"
>
<intent-filter><action android:name="com.example.com.yanshi.AIDLServier"></action>
</intent-filter>
</service>
![这里写图片描述](http://img.blog.csdn.net/20161021130200704)
</application>
</manifest>
致此,服务器就写完了。下面是客户端
一、创建一个客户端,也需要创建一个AIDL,但是包名和接口全部都要一样
二、上面点击之后会出现这个界面,一直点击创建即可
三、创建成功后
四、客户端同样需要创建AIDL,但是接口必须和服务端一样,包名也一样
五、然后把服务端的AIDL复制到客户端,外面的包名一样
六、编译一下项目,这样aidl才会生效
七、代码中如何去绑定服务,并和客户端进行关联呢?
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.example.com.yanshi.MyAidl;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private TextView text_view;
private Button but;
private MyAidl myaidl;
private ServiceConnection conn = new ServiceConnection() {
@Override
//如果绑定成功回调此方法
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i("Text","qqqqqqqqqqqqqqqqqqqqqqqqqqqqq");
myaidl = MyAidl.Stub.asInterface(service);
}
@Override
//接触绑定,回调此方法
public void onServiceDisconnected(ComponentName name) {
Log.i("Text","ffffffffffffffffffffffffffff");
myaidl=null;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
//绑定服务
binderServer();
}
private void binderServer() {
Intent intent = new Intent();
//请仔细看服务端清单文件中的配置信息
intent.setComponent(new ComponentName("com.example.com.yanshi","com.example.com.yanshi.AIDLServier"));
bindService(intent,conn, Context.BIND_AUTO_CREATE);
Log.i("Text","*********************************");
}
private void init() {
text_view = (TextView)findViewById(R.id.text_view);
but=(Button)findViewById(R.id.but);
but.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.but:
try {
//点击后,通过我们创建的AIDL对象进行调用接口传递参数给服务端。服务端进行处理
String s=myaidl.getvalue("ddd");
text_view.setText(s);
Toast.makeText(MainActivity.this,"tttttttttttttttttt"+s,Toast.LENGTH_SHORT);
} catch (RemoteException e) {
e.printStackTrace();
}
break;
}
}
}![这里写图片描述](http://img.blog.csdn.net/20161021131544534)
八、用真机运行这两个项目,保证两者都在运行状态
九、结果,我们获得到了服务器给我们返回的值,至此,这个例子就OK了。
demo:http://download.csdn.net/detail/bobo8945510/9660006
作者:bobo8945510 发表于2016/10/21 13:31:45 原文链接
阅读:31 评论:0 查看评论