Skip to content Skip to sidebar Skip to footer

Rapid Ipc With Messengers Or Aidl

I'm attempting to create a program in Android which communicates rapidly with a remote service (~40,000/sec), however all Android IPC seems to fall short of being able to accomplis

Solution 1:

do something like that:

MainActivity

// use it for writing: stream.write(byte[]) // (make sure to write as biggest data chunks as possible)// or wrap it around some other streams like DataOutputStreamprivate OutputStream stream;

// ServiceConnection implementation@OverridepublicvoidonServiceConnected(ComponentName name, IBinder service) {
    try {
        ParcelFileDescriptor[] pipe = ParcelFileDescriptor.createPipe();
        stream = newParcelFileDescriptor.AutoCloseOutputStream(pipe[1]);

        Parceldata= Parcel.obtain();
        FileDescriptorreadFileDescriptor= pipe[0].getFileDescriptor();
        data.writeFileDescriptor(readFileDescriptor);
        service.transact(IBinder.FIRST_CALL_TRANSACTION, data, null, 0);
    } catch (Exception e) {
        e.printStackTrace();
    }
    Log.d(TAG, "onServiceConnected " + stream);
}

RemoteService

@Overridepublic IBinder onBind(Intent intent) {
    Log.d(TAG, "onBind ");
    return binder;
}

IBinderbinder=newBinder() {
    @OverrideprotectedbooleanonTransact(int code, Parcel data, Parcel reply, int flags)throws RemoteException {
        ParcelFileDescriptorpfd= data.readFileDescriptor();
        finalInputStreamstream=newParcelFileDescriptor.AutoCloseInputStream(pfd);
        // do something with a 'stream', start a new Thread for example and read data in a loop
        ...
        ...
        returntrue;
    }
};

Post a Comment for "Rapid Ipc With Messengers Or Aidl"