Service là một trong 4 thành phần chính của android (Activity, Service, BroadcastReceiver, ContentProvider). Service không có giao diện chuyên dùng để thực hiện một nhiệm vụ nào đó được thực hiện ngầm dưới background mà không cần tương tác đến giao diện ví dụ như: chơi nhạc nền, download file, xử lý tính toán…
Một serivce là một thành phần chạy dưới nền mà không trực tiếp tương tác với người dùng. Service không có giao diện người dùng, nó không có bao quanh bởi lifecycle của một activity.
Service dùng cho các tác vụ chạy lâu dài, ví dụ download, checking new data, data processing, update content…
Service chạy với độ ưu tiên cao hơn so với activiy invisible vì vậy nó ít bị khả năng hệ thống Android kết thúc. Service có thể được cấu hình để khởi động lại nếu nó bị kết thúc bởi hệ thống android môt khi các tài nguyên lại có sẵn lần nữa.
Có khả năng chỉ định service có ngang độ ưu tiên với activity đang active. Trong trường hợp này nó được yêu cầu để có một hành động notification nhìn thấy được cho các dịch vụ liên quan. Nó được thường xuyên sử dụng để chơi nhạc hoặc video.
Lưu ý: Khi một context nào đó gọi startService() để start service mong muốn. Nếu service đó chưa được khởi tạo sẽ gọi onCreate() rồi gọi tiếp onStart().
Nếu sau đó lại có context gọi service này mà service đang chạy thì chi mỗi phương thức onStart() được gọi lại, không gọi lại onCreate().
Như vậy cho dù bạn có start bao nhiều lần thì chỉ có duy nhất mất một instance của service và chỉ cần gọi stopService() một lần để kết thúc service.
Có 2 loại service tương ứng với 2 kiểu start Service:
1. Unbound Service sử dụng phương thức startService(), thường được sử dụng để thực thi một hành động đơn và có thể không trả về kết quả (ví dụ chơi nhac). Để kết thúc Service sẽ phải gọi hàm stopService().
Ví dụ:Khi chơi nhạc thì gọi startService, muốn nhạc dừng chơi thì stopService.
2. Bound Service sử dụng phương thức blindService() cung cấp một interface dạng client-server cho phép app có thể tương tác với service.
Bound Service đóng vai trò như môt server trong mô hình client-server. Bound service cho phép các thành phần của app (Activity) có thể liên kết với service để gửi các request- nhận response.
Bound Service chỉ tồn tại khi nó phục vụ một thành phần của app mà nó không tồn tại vô hạn dưới background.
Có 3 cách để blindService từ các thành phần của app:
– IBlinder
– Messenger
– AIDL