Service
- Run in the main thread of the hosting application
- Android can kill the Service if need the resources
Purpose
Send Toast from the Service
AIDL Syntaxis
Data Types
- Supporting inter-application method execution
- Performing background processing
Start a Service
- Call Context.startService(Intent intent)\
- To call from a Fragment use
- getActivity().getApplicationContext().startService( intentService);
Executing the service
- After call startService(...)
- In the Service is executed the method onStartCommand(...)
- If the method returns the constant START_NOT_STICKY
- then Android will not restart the service automatically if the the process is killedp
Foreground
- To execute the service foreground call the method startForeground()
- Use this if the user is aware of the process
Bind to a Service
- Call the method Context.bindService(
- Intent service
- ServiceConnection con
- int flags
- )
Send Toast from the Service
- On the method onStartCommand receive the message
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(getApplicationContext(), intent.getStringExtra(MSG),
Toast.LENGTH_LONG).show();
return super.onStartCommand(intent, flags, startId);
}
Binding to Remote Services
When the client is running in a different thread
Communication
- Using Messenger class
- Manage a Hanlder
- Messages can be sent across process boundaries
- Messages are queued and process sequencially
Implementing Messages
- Service
- Creates a Handler for processing the messages
- Creates a messenger that provides a binder to a client
- Client
- Use the binder to create its own messenger
- Send the messages to the service
Implementing AIDL
Using AIDL interface
Using AIDL interface
- Define remote interface in AIDL (Android Interface Definition Language)
- Declare in .AIDL file
- AIDL defines how components can interact with the service
- Implement remote interface
- Implement Service methods
- Implement Client methods
- Is like Java interface
- Cannot declare static fields
- Non-primitive remote method parameters require a directional tag
- in - transferred to the remote method
- out - return to the caller
- inout - for both
Data Types
- Java Primitive Types
- Oher AIDL (Generated interfaces)
- Classes that implement Parcelable Protocol
- List
- Generic List Supported
- Map
- Generic Map is not supported
Considerations
- When create the intent to invoke the AIDL server do it like
- Intent intent = new Intent(KeyGeneratorAidl.class.getName());
- Where KeyGeneratorAidl is the server class
Comentarios
Publicar un comentario