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 “”