AIDL在AndroidStudio的用法

AIDL:Android Interface Definition Language,即Android接口定义语言。Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信,AIDL就是其中的一种。

AIDL使用方法:

AIDL服务端的代码:

1、在main文件中新建AIDL文件,如图:



2、在新建的AIDL文件中,声明需要实现的方法:

interface CalculationService {

        int getAddNumber(int number1,int number2);

}

3、重要的事情说三遍:1.Build---->make project      2.Build---->make project     3.Build---->make project

PS:若做完这一步你能看见如图的情况,说明成功:


4、写一个类继承的xxx.Stub(xxx即你AIDL文件的名称)

public class CalcultionFunction extends CalculationService.Stub {
    @Override
    public int getAddNumber(int number1,int number2) throws RemoteException {
        return number1+number2;
    }
}
5、开一个服务

public class MyService extends Service {

    CalcultionFunction function=new CalcultionFunction();

    @Override
    public IBinder onBind(Intent intent) {
        return function;
    }

}
6、在清单文件中声明服务

<service android:name=".MyService">
            <intent-filter>
                <action android:name="com.test.calculation"/>
            </intent-filter>
        </service>

这是AIDL服务端的代码就写完了,接下来写AIDL服务器端的代码:

7、复制你刚刚的AIDL文件到客户端项目,务必保证包名相同:


8、同样的Build--->make project

9、接下来就可以正常调用服务端提供的AIDL接口中的方法了:

public class MainActivity extends AppCompatActivity {

    private TextView tv;
    private Button btn;

    private Intent binderIntent;
    private CalculationService calculationService;

    private ServiceConnection serviceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            calculationService = CalculationService.Stub.asInterface(service);
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        binderIntent = new Intent("com.test.calculation");
        bindService(binderIntent, serviceConnection, BIND_AUTO_CREATE);
        tv= (TextView) findViewById(R.id.tv);
        btn= (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    int addNumber = calculationService.getAddNumber(9, 11);
                    tv.setText("9+11=" + addNumber);
                } catch (RemoteException e) {
                    e.printStackTrace();
                }

            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //断开与远程Service的连接
        unbindService(serviceConnection);
    }
}

PS:服务端和客户端的AIDL文件的包名必须相同

        新建AIDL后需要make project

相关源码下载地址:http://download.csdn.net/detail/wl1769127285/9636344源码下载

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值