android中AIDL

1 关于AIDL

AIDL是android interface definition language,译为android接口定义语言,实为实现android应用程序与应用程序之间通信的,因为android应用程序与应用程序之间不同共享内存,所以要实现应用程序与应用程序之间的数据访问,AIDL尤为重要,因此也称其为跨进程访问服务。

2 Android中AIDL的实现

I. 首先我创建了一个android项目为AIDLTest,在该项目中,我定义了一个ImyService.aidl文件,该文件内容的实现实为android中的接口。代码如下:

package com.example.aidltest;

 

interface IMyService {

       StringgetValue();

}

II. 然后在该项目中创建一个Service,名为MyService.java,继承自android四大组件之一的Service,在该类中定义一个内部类MyServiceImpl继承自先前定义的ImyService.Stub,该文件是在创建了aidl文件后自动生成的。

import android.app.Service;

import android.content.Intent;

import android.os.IBinder;

import android.os.RemoteException;

 

public class MyService extends Service {

 

       @Override

       publicIBinder onBind(Intent arg0) {

              returnnew MyServiceImpl();

       }

      

       publicclass MyServiceImpl extends IMyService.Stub {

 

              @Override

              publicString getValue() throws RemoteException {

                    

                     return"Hello AIDL.";

              }

             

             

       }

 

}

III. 在AndroidMainfest.xml中配置服务

<serviceandroid:name=".MyService">

           <intent-filter>

                <actionandroid:name="com.example.aidltest.IMyService"/>

           </intent-filter>

       </service>

OK,AIDL服务创建成功了!

IV. 创建一个AIDLClientTest项目,用于访问先前AIDLTest中的内容;首先将先前AIDLTest项目中自动生成的IMyService.java连同包一起拷贝到AIDLClientTest项目中;如下图所示:

然后就是在MainActivity.java中实现调用了;代码如下:

package com.example.aidlclienttest;

 

import com.example.aidltest.IMyService;

 

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.TextView;

import android.app.Activity;

import android.content.ComponentName;

import android.content.Context;

import android.content.Intent;

import android.content.ServiceConnection;

 

public class MainActivity extends Activity {

       privateIMyService myService;

       privateButton btnBindService;

       privateButton btnStartService;

       privateTextView tvContent;

       @Override

       protectedvoid onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              setContentView(R.layout.activity_main);

              this.btnBindService= (Button) findViewById(R.id.bindService);

              this.btnStartService= (Button) findViewById(R.id.startService);

              this.tvContent= (TextView) findViewById(R.id.tvContent);

              this.btnBindService.setOnClickListener(listener);

              this.btnStartService.setOnClickListener(listener);

       }

      

       OnClickListenerlistener = new OnClickListener() {

             

              @Override

              publicvoid onClick(View view) {

                     switch(view.getId()) {

                     caseR.id.bindService:

                            bindService(newIntent("com.example.aidltest.IMyService"), connection,Context.BIND_AUTO_CREATE);

                            break;

                     caseR.id.startService:

                            try{

                                   Log.v("service",myService.getValue());

                                   tvContent.setText(myService.getValue());

                            }catch (RemoteException e) {

                                   e.printStackTrace();

                            }

                            break;

 

                     default:

                            break;

                     }

              }

       };

      

       ServiceConnectionconnection = new ServiceConnection() {

             

              @Override

              publicvoid onServiceDisconnected(ComponentName arg0) {

                    

              }

             

              @Override

              publicvoid onServiceConnected(ComponentName arg0, IBinder arg1) {

                     myService= IMyService.Stub.asInterface(arg1);

                    

              }

       };

 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值