Khi một Activity được kết nối tới một Service, nó duy trì một tham chiếu đến một thực thể Service. Để kết nối đến thực thể này, thực thi phương thức onBind như
sau:
private final IBinder binder = new MyBinder(); @Override
public IBinder onBind(Intent intent) {
return binder;
}
-------------
public class MyBinder extends Binder {
MyService getService() {
return MyService.this;
}
Sự kết nối giữa Service và Acitvity được thể hiện qua một ServiceConnection. Điều cần làm là thực thi một ServiceConnection mới, override phương thức
onServiceConnected và onServiceDisconnected. // tham chiếu đến dịch vụ
private MyService serviceBinder;
// xử lý kết nồi giữa service và activity
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
// được gọi khi liên kết được thực hiện
serviceBinder = ((MyService.MyBinder)service).getService();
}
public void onServiceDisconnected(ComponentName className) {
// nhận khi dịch vụ ngắt kết nối một cách bất ngờ
serviceBinder = null;
}
Để thực hiện việc kết nối, gọi phương thức bindService:
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
// kết nối dịch vụ
bindService(bindIntent, mConnection, Context.BIND_AUTO_CREATE);
}
Hình 8 – Hoạt động kết nối dịch vụ
Thơng thường, vịng đời của dịch vụ khi có client kết nối từ đầu như sau:
o Cũng bắt đầu bằng onCreate() rồi đến onBind() và dịch vụ chạy dưới nền.
o Khi khơng cịn client kết nối tới thì dịch vụ gọi onUnbind() rồi onDestroy().
Có một số trường hợp khơng thơng thường, ví dụ như:
o Có một context khởi động một dịch vụ, sau đó có một số client kết nối (bind) tới service.
o Có nhiều client cùng lúc kết nối tới dịch vụ.
o Một activity vừa gọi startService() vừa gọi bindService(). 2.4 Trình cung cấp nội dung (Content Providers):