|
In early betas, the Android IPC was strictly synchronous. This
means that service invocations had to wait for the return value of the remote method
to arrive back to the caller. This is generally an advantage because the caller
can be sure that the called service received the invocation by the time the remote
method returns. In some cases, however, this causes the caller to wait unnecessarily.
If synchronicity is not required and the method has no return value, oneway AIDL
interfaces may be used.
Oneway methods are specified by addind the oneway keyword to the AIDL interface
definition.
oneway interface IncreaseCounter {
void increaseCounter( int diff );
}
Only the entire interface can be oneway and these methods must all have void return
value. The stub compiled from oneway AIDL interface does not have return path for
remote methods on the service side and does not wait for the method to execute on
the client side. The delivery is reliable (no invocations are lost) but the timing
is not guaranteed, e.g. two sequential oneway invocations may arrive at the invoked
service in different order. Oneway interfaces are therefore more complicated to
use (they are also faster and don't block the caller) and are used extensively by
the Android framework internally to deliver event notifications.
Click here to download the example program.

Our primitive example has an Activity and a Service. The service exposes two interfaces:
one "normal" (Counter.aidl) and one oneway (increaseCounter.aidl). The interesting
bit here is how one service can expose two interfaces. The onBind method checks
the Intent used to bind the service and returns different binders based on the Intent.
The important point here not to use the Intent extra Bundle to differentiate among
interfaces. I did this and I can confirm that even though extras arrive at onBind
(the API documentation states the contrary) but the framework gets completely confused
and thinks that the service has already been bound with the same Intent (the framework
seemingly cannot figure out that the Intent extras were different). In the example
program I abused the category field therefore and this works nicely.
Source:
mylifewithandroid
|
How to display a JPG...
Is that posible to zoom in and drag p...
Making a custom Andr...
Cool - I will use it carefully i promise
How to display a JPG...
problem in image loading - i have exe...
Introducing Calculon...
Thank You for your contribution - Hi,...
Debug a Native Appli...
Never mind, I somehow overlooked the ...