Service là gì? Vòng đời Service? So sánh Bounded Service (Service ràng buộc), UnBounded Service (Service không ràng buộc) và Intent Service

Đăng bởi: Admin | Lượt xem: 2985 | Chuyên mục: Android

Trong bài viết này chúng ta cùng tìm hiểu Service là gì? Các phương thức quan trọng của Service? Có các loại Service nào? Vòng đời của từng loại Service và So sánh 3 loại Service: Bounded Service (Service ràng buộc), Unbounded Service (Service không ràng buộc) và Intent Service.


1.Service là gì?

Một Service (dịch vụ) là một thành phần chạy ngầm trên hệ điều hành để thực hiện các hoạt động dài hạn mà không cần phải tương tác với người sử dụng và nó hoạt động ngay cả khi ứng dụng bị hủy. Một Service cơ bản có thể có hai loại.

Trạng thái

Mô tả
Started

(Được khởi động)
Một Service được gọi là started (được khởi động) khi một thành phần ứng dụng, chẳng hạn như Activity khởi động nó bằng cách gọi startService(). Một khi được gọi, Service này có thể chạy ở chế độ nền vô thời hạn, thậm chí cả khi thành phần đã khởi động nó bị phá hủy.

Service này còn được gọi là Service không bị ràng buộc (Un Bounded Service).
Bound

(Ràng buộc)
Một Service được ràng buộc (bound) khi một thành phần ứng dụng ràng buộc nó bằng cách gọi bindService().
Một Service ràng buộc cung cấp một giao diện client-server cho phép các thành phần tương tác với Service, gửi các yêu cầu, nhận kết quả, và thậm chí làm như vậy xuyên qua nhiều tiến trình với Interprocess communication (IPC) (Truyền thông nhiều tiến trình).

Trong khoa học máy tính, inter-process communication (IPC) là hoạt động chia sẻ dữ liệu qua nhiều tiến trình chuyên dụng thông thường sử dụng giao thức truyền thông.  Cụ thể ứng dụng sử dụng IPC được phân ra như clients và servers, khi các clients yêu cầu dữ liệu, và server đáp ứng yêu cầu của client.

2. Vòng đời Service

Một Service có phương thức gọi lại chu kỳ vòng đời của nó (life cycle callback methods) mà bạn có thực hiện (implement) để theo dõi những thay đổi trong trạng thái của Service và bạn có thể thực hiện công việc ở giai đoạn thích hợp. Sơ đồ dưới đây bên trái cho thấy vòng đời khi Service được tạo ra với startService(), sơ đồ bên phải cho thấy vòng đời của Service được tạo ra bởi bindService().

Ngoài 2 loại Service trên, có một Service khác gọi là IntentServiceIntent Service được sử dụng để thực hiện các nhiệm vụ một lần duy nhất, nghĩa là khi nhiệm vụ hoàn thành Service tự hủy.

3. So sánh các loại Service

Unbound Service
(Không ràng buộc)
Bound Service
(Ràng buộc)
Intent 
Service
Unbounded Service được sử dụng để thực hiện nhiệm vụ lâu dài và lặp đi lặp lại.                                    Bounded Service được sử dụng để thực hiện nhiệm vụ ở nền (background) và ràng buộc với thành phần giao diện. Intent Service được sử dụng để thực hiện các nhiệm vụ một lần duy nhất, nghĩa là khi nhiệm vụ hoàn thành Service tự hủy.
Unbound Service được khởi động bởi gọi startService(). Bounded Service được khởi động bởi gọi bindService(). Intent Service được khởi động bởi gọi startService().
Unbound Service bị dừng lại hoặc bị hủy bởi gọi một cách tường minh phương thức stopService(). Bounded Service bị gỡ ràng buộc hoặc bị hủy bởi gọi unbindService(). IntentService gọi một cách không tường minh phương thức stopself() 
Unbound Service độc lập với thành phần đã khởi động nó. Bound Service phụ thuộc vào thành phần giao diện đã khởi động nó. Intent Service độc lập với thành phần đã khởi động nó.

4. Các phương thức callback trong Service

Để tạo ra một Service, bạn tạo một lớp Java mở rộng lớp Service hoặc một trong các lớp con của nó. Lớp Service định nghĩa các phương thức callback khác nhau và quan trọng nhất được đưa ra dưới đây. Bạn không cần phải thực hiện (implements) tất cả các phương thức callbacks. Tuy nhiên, điều quan trọng là bạn hiểu mỗi phương thức thực hiện những điều gì, đảm bảo ứng dụng của thực hiện theo cách người dùng mong đợi.

Callback Description

onStartCommand()

Hệ thống gọi phương thức này khi một thành phần khác, chẳng hạn như một Activity, yêu cầu khởi động Service, bằng cách gọi startService(). Nếu bạn thực thi phương pháp này, trách nhiệm của bạn là ngừng Service khi nó hoàn thành công việc, bằng cách gọi phương thức stopSelf() hoặc stopService().
onBind() Hệ thống gọi phương thức này khi thành phần khác muốn liên kết với các Service bằng cách gọi bindService(). Nếu bạn thi hành phương pháp này, bạn phải cung cấp một giao diện (Giao diện ứng dụng) mà khách hàng sử dụng để giao tiếp với các Service, bằng cách trả lại một đối tượng IBinder. Bạn phải luôn luôn thi hành phương thức này, nhưng nếu bạn không muốn cho phép ràng buộc, bạn có thể trả về null.
onUnbind() Hệ thống gọi phương thức này khi tất cả các clients đã bị ngắt kết nối từ một giao diện cụ thể được công bố bởi các Service.
onRebind() Hệ thống gọi phương thức này khi khách hàng mới đã kết nối với Service, sau khi trước đó đã được thông báo rằng tất cả đã bị ngắt kết nối trong onUnbind(Intent).
onCreate() Hệ thống gọi phương thức này khi Service được tạo ra sử dụng đầu tiên onStartCommand() hoặc onBind(). Gọi một lần tại thời điểm thiết lập.
onDestroy() Hệ thống gọi phương thức này khi Service không còn được sử dụng và đang bị hủy (destroy). Service của bạn nên thi hành điều này để dọn dẹp các dữ liệu rác...

Ở bài viết sau chúng ta sẽ đi tìm hiểu sâu về từng loại Service, cách sử dụng và các ví dụ minh họa.

Xem thêm tại đây:

Bounded Service

UnBounded Service

Intent Service

vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!



Khóa học liên quan

Khóa học: Android

Học Kotlin cơ bản
Số bài học:
Lượt xem: 17328
Đăng bởi: Admin
Chuyên mục: Android

Học lập trình Flutter cơ bản
Số bài học:
Lượt xem: 56809
Đăng bởi: Admin
Chuyên mục: Android

Lập trình Android cơ bản
Số bài học:
Lượt xem: 22590
Đăng bởi: Admin
Chuyên mục: Android