首页 / 操作系统 / Linux / Android中的跨进程回调
在Android应用程序开发中,可能会遇到跨进程回调问题,比如,调用一个服务,但服务是异步的,服务完成后,需要给客户一个通知,这时就需要用到跨进程回调了。跨进程回调本质上用到了Binder机制,其过程如下:1.定义aidlITest.aidlpackage com.example.chirpdemo;
import com.example.chirpdemo.ITestListener;interface ITest {
int getValue();
void setValue(int value);
void listen(ITestListener listener);
}ITestListener.aidlpackage com.example.chirpdemo;interface ITestListener {
void onFinished(int result);
}2.Service定义如下:package com.example.chirpdemo;import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;public class MyService extends Service {
final private static String TAG = "MyService"; public class ServiceImpl extends ITest.Stub {
private int mValue;
private ITestListener mListener; public ServiceImpl() {
mValue = 0;
} @Override
public int getValue() throws RemoteException {
return mValue;
} @Override
public void setValue(int value) throws RemoteException {
mValue = value; if (null != mListener) {
mListener.onFinished(-1);
}
} @Override
public void listen(ITestListener listener) throws RemoteException {
mListener = listener;
}
} @Override
public void onCreate() {
Log.d(TAG, "onCreate");
super.onCreate();
} @Override
public void onDestroy() {
Log.d(TAG, "onDestroy");
super.onDestroy();
} @Override
public void onStart(Intent intent, int startId) {
Log.d(TAG, "onStart");
super.onStart(intent, startId);
} @Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand");
return super.onStartCommand(intent, flags, startId);
} @Override
public boolean onUnbind(Intent intent) {
Log.d(TAG, "onUnbind");
return super.onUnbind(intent);
} @Override
public void onRebind(Intent intent) {
Log.d(TAG, "onRebind");
super.onRebind(intent);
} @Override
public IBinder onBind(Intent arg0) {
return new ServiceImpl();
}}