Android中的跨进程回调

Android应用程序开发中,可能会遇到跨进程回调问题,比如,调用一个服务,但服务是异步的,服务完成后,需要给客户一个通知,这时就需要用到跨进程回调了。跨进程回调本质上用到了Binder机制,其过程如下:

1.定义aidl

ITest.aidl

package com.example.chirpdemo;
import com.example.chirpdemo.ITestListener;

interface ITest {
int getValue();
void setValue(int value);
void listen(ITestListener listener);
}

ITestListener.aidl

package 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();
    }

}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/e8e8c3eda58b8b9f35eaf00f0a9f1533.html