Thứ Sáu, 21 tháng 12, 2018

Tổng quan về Service trong Android cho người mới bắt đầu


Ứng dụng Android không gây tốn nhiều tài nguyên thiết bị quá mức là một xu hướng tích cực. Người dùng vẫn có thể thực hiện tác vụ quan trọng trong background thay vì main UI để tránh làm ứng dụng bị treo. Trong những trường hợp này, Service trong Android là giải pháp phù hợp nhất dành cho nhà lập trình.

Kiến thức về Service trong Android sẽ rất hữu ích

1. Khái niệm Service trong Android là gì?

Service là một trong 4 thành phần trọng yếu của ứng dụng Android. Service có thể thực hiện các tác vụ cần nhiều thời gian trong nền, không cần có giao diện người dùng(UI). Từ Activity, bạn có thể khởi chạy một Service trong Android và có thể tắt ứng dụng dễ dàng hay chuyển sang ứng dụng khác mà Service vẫn tiếp tục công việc mà không bị gián đoạn.

Tại sao lại cần đến Service trong lập trình Android?


Điều này sẽ góp phần giúp đa nhiệm tốt hơn, giảm chiếm dụng RAM và hiện tượng giật lag khi sử dụng.Vì vậy, khi cần xử lý bất kỳ tác vụ cần thời gian dài thì Service trong Android là một gợi ý tuyệt vời.

Service là một phần quan trọng trong lập trình Android

Service không có giao diện người dùng nào. Một service có thể chạy dưới nền trong thời gian không giới hạn. Về bản chất, Service vẫn chạy trên main thread của ứng dụng (mỗi ứng dụng khi chạy, Android sẽ tạo một thread cho ứng dụng đó). Nó không cần tới Thread riêng độc lập với ứng dụng.

Trong trường hợp service của bạn bị treo, điều này có thể khiến ứng dụng cũng bị treo (lỗi ANR). Để tránh tình trạng này, bạn nên tạo một Thread( như AsyncTask) bên trong Service.

2. Các loại service trong Android


Theo trang chủ chính thức của lập trình Android, developer.android.com thì Service được chia làm 3 loại:

Foreground Service thực hiện một số thao tác mà người dùng chú ý, có thể thấy rõ ràng. Ví dụ ứng dụng nghe nhạc có thể chơi một bản nhạc và điều khiển bằng Foreground Service. Điều kiện bắt buộc là Foreground Service phải hiển thị một thông báo (Notification). Foreground Service sẽ vẫn chạy ngay cả khi người dùng không có tương tác với ứng dụng.

Background Service sẽ thực hiện các hoạt động mà không được người dùng chú ý trực tiếp. Ví dụ một ứng dụng sử dụng một service để thu gom thông tin, bộ nhớ chẳng hạn thì nó là Background Service. Hoạt động này người dùng không cần thiết phải để ý.


Bound Service là service có một thành phần của ứng dụng ràng buộc với nó bởi lời gọi bindService(). Một Bound Service đem đến một giao diện Client - Server cho phép các thành phần tương tác với nó: gửi yêu cầu, nhận kết quả và thậm chí là IPC. Một Bound Service chỉ chạy miễn là có một thành phần ràng buộc với nó; có thể có nhiều thành phần ràng buộc với Bound Service cùng lúc. Tuy nhiên, một khi tất cả hết ràng buộc (unbound) thì nó sẽ bị Destroy.

3. Vòng đời của Service trong Android


Tương tự như Activity, Service trong Android cũng có vòng đời từ lúc bắt đầu cho đến khi destroy. Để hiểu rõ, các bạn xem hình bên dưới:
Vòng đời của Service trong Android

4. Một số hàm quan trọng của Service trong Android


onStartCommand(): Đây là hàm được gọi khi service bắt đầu bằng cách gọi hàm startService(). Khi hàm này hoạt động, service được khởi động và có thể chạy nền vô thời hạn. Để có thể hủy service thì chỉ có 2 cách:

· Bạn cần tự gọi hàm stopSelf() hoặc stopService().

· Mặc kệ chờ đến khi hệ thống Android cần tài nguyên cho ứng dụng khác thì sẽ tự động kill service này .

onBind(): Hàm chỉ được thực hiện nếu service là bound service. Bạn phải cung cấp một giao diện mà client sử dụng để giao tiếp với Service bằng cách trả về một IBinder. Hàm này sẽ được gọi bất kể khi nào có một thành phần nào đó muốn bind vào service.

onCreate(): Hàm được gọi khi service được khởi tạo và chỉ được gọi duy nhất một lần

onDestroy(): Hàm được gọi khi service bị hủy (có thể do bạn gọi hàm stopService() hoặc do hệ thống tự hủy) để giải phóng tài nguyên.


Trên đây là tổng quan kiến thức về Service trong Android. Nếu bạn muốn lập trình Android chuyên sâu, đây thực sự là một kho kiến thức đáng giá cần trau dồi và rèn luyện.

Không có nhận xét nào:

Đăng nhận xét