Android —— binder通信

1.Binder通信是进程通信的一种实现方式

(1) 创建IMyService.aidl文件,编译AIDL文件

// IMyService.aidl,是一个接口文件 
package com.example;

// 定义一个接口,接口里面是add函数
interface IMyService {
    int add(int a, int b);
}

(2) 创建MyService.java文件,创建MyService服务,实现IMyService接口——服务端 

// MyService.java
package com.example;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;

public class MyService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }
    //回调函数

    private final IMyService.Stub mBinder = new IMyService.Stub() {
        @Override
        public int add(int a, int b) throws RemoteException {
            return a + b;
        }
    };
}

(3) 创建MainActivity.java文件,创建MainActivity活动,调用服务端方法

// MainActivity.java (客户端)
package com.example.client;

import android.content.ComponentName;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import com.example.IMyService;

public class MainActivity extends AppCompatActivity {

    private IMyService mService;

    private ServiceConnection mConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            mService = IMyService.Stub.asInterface(iBinder);
            try {
                // 这里是Binder通信
                int result = mService.add(5, 3);
                Toast.makeText(MainActivity.this, "Addition result: " + result, Toast.LENGTH_SHORT).show();
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {
            mService = null;
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        bindService(new Intent(this, MyService.class), mConnection, BIND_AUTO_CREATE);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mConnection != null) {
            unbindService(mConnection);
        }
    }
}

2.Proxy 和 Stub

客户端  Proxy  “取款机”

服务端  Stub  “”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值