Nếu bạn là 1 lập trình viên Android ắt hẳn các bạn phải biết đến Service là cái gì? Nhưng có bao giờ bạn tự hỏi trong Android có bao nhiêu loại Service, hay chỉ đơn giản bạn bị 1 người nào đó hỏi 1 cách bất ngờ(trong 1 cuộc phỏng vấn chẳng hạn :v)

1 Service có thể được gọi bởi 1 intent từ các thành khác nhau như Activity, Service, Broadcast Receiver (gọi chung là client). Service được gọi có thể chạy trên cùng process hoặc khác process với client. Nếu Service chạy trên cùng process với client thì được gọi là local, trái lại thì được gọi là remote. Trong remote lại được chia làm 2 loại là private và global.

Như vậy chúng ta có bao nhiêu loại Service rồi? yeah có 3 loại gồm:

  • Local Service
  • Private Remote Service
  • Global Remote Service

Screen Shot 2016-08-03 at 9.25.41 AM

Local Service: là Service được chạy trên cùng process với client (các thành phần đã gọi nó). Chúng cùng chạy trên UI Thread và cùng chia sẽ bộ nhớ Heap. Do đó việc giao tiếp và trao đổi dữ liệu giữa từ Service tới client có thể thực hiện 1 cách dễ dàng. Các ứng dụng nghe nhạc sử dụng kỷ thuật này.

Private Remote Service: Service chạy trên 1 process riêng biệt(remote Service), chỉ các client cùng ứng dụng với Service mới gọi được nó. Private Remote Service này có UI Thread riêng biệt so với UI Thread của client. Do dó UI Thread của service không ảnh hưởng tới  UI Thread của client. Private Remote Service không thể chia sẽ dữ liệu trực tiếp tới client bởi vì chúng không chia sẽ cùng bộ nhớ heap. Thay vào đó client gọi service thông qua kỷ thuật binder.

Global Remote Service: là Service có thể được gọi từ các ứng dụng khác nhau. Nó có những đặc tính giống như Private Remote Service như có UI Thread, bộ nhớ heap riêng biệt và chạy chạy trên binder thread. Điểm khác biệt là nó không được gọi thông qua tên lớp (class name) mà thông qua intent filter. vd về Global Remote Servie là các service được cung cấp bởi hệ thống như GPS, Contact,…

Trong lập trình Android thì Local Service là được sử dụng phổ biến nhất vì Service được chạy trên cùng 1 process so với client. Cho nên việc thiết lập giao tiếp, chia sẽ dữ liệu sẽ đơn giản hơn không phải thực hiện các kỹ thuật phức tạp như IPC, AIDL. Việc không phải tạo 1 process mới củng giúp chúng ta giảm đáng kể lượng bộ nhớ để cấp phát cho mỗi process.

Mặc dù Local Service có nhiều điểm lợi nhưng đôi khi chúng ta củng cần chạy Service ở remote. Khi mà chúng ta cần cung cấp 1 hay 1 số chức năng cho nhiều ứng dụng cùng sử dụng như GPS Service, Sound Service,… 1 thuận lợi của Remote Service là nếu có lỗi xẩy ra trên Remote Service thì chỉ ảnh hưởng trên process của Remote Service mà không ảnh hưởng đến Process của client.

Như vậy là mình đã giới thiệu cho các bạn 3 loại Service trong Android, ưu điểm và nhược điểm của từng loại. Chọn loại nào để sử dụng là tuỳ thuộc vào yêu cầu và mục đính của ứng dụng các bạn sắp viết. Hy vọng bài viết cung thấp thêm thông tin hữu ích về Android cho các bạn

Thân ái,

Advertisements