android进程间的通信方式AIDL

利用android-studio工具创建android项目进程之间的通信AIDL的方法总结步骤:

1、创建服务器端的AIDL文件:

       studio工具AIDLServer项目右击选择:new--->AIDL-->AIDL File,会在项目的src/main目录下创建一aidl文件,在该文件下创建和package包名一致的文件名,

        创建AIDLService.aidl文件,用户可编写自己要实现的方法

2、在项目的build.gradle中,需要指定aidl文件路径,使系统自动为用户编译生成AIDLService.java文件,编辑完成后可在项目中

      build/generated/source/aidl/debug目录中查看JAVA源文件。我的代码如下:

      注释:这步骤是必须指定的,要不然studio不会为项目编译文件。

      

3、编写自己的service类,实现AIDL定义的接口(Stub类下的接口)


4、在Manifest.xml文件中配置service,并指定AIDL接口路径。


以上是服务器端AIDL接口的定义

==================================================

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

下面是客户端与服务器端通信,实现AIDL接口,步骤如下:

1、将AIDL文件复制到客户端的项目中


2、复制完成后,路径指定成功后,可以在项目中使用AIDL接口完成进程间的通信。

    

public class Main extends Activity {
    private Button bindServiceBtn;
    private Button invokeServiceBtn;
    private AIDLService myService = null;
    private ServiceConnection conn = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //获取服务对象
            myService = AIDLService.Stub.asInterface(service);
        }
        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_aidl);
        bindServiceBtn = (Button) findViewById(R.id.bindService);
        invokeServiceBtn = (Button) findViewById(R.id.invokeService);
        bindServiceBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                bindService(new Intent("com.test.activity.mytest.AIDLService"), conn, Context.BIND_AUTO_CREATE);
            }
        });
        invokeServiceBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    myService.registerTestService();
                    String str = myService.invokeTestCallBack("test successs");
                    System.out.println("str ..." + str);
                } catch (RemoteException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}
 
总结:项目中最容易出错的地方,大家注意以下:
1.指定AIDL路径
2.Manifest.xml文件中配置service
3.从服务器端复制AIDL定义的接口到客户端的地方。








    

   





     


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值