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"