lap trinh android chuyen nghiep

Service trong Android là gì?

Service trong Android là gì?
5 (100%) 1 Hài lòng

1. Thống nhất các từ khóa

  • Thành phần ứng dụng (thành phần app – application component) là Activity, Intent, ContentProvider, Services ngoài ra có các thành phần ứng dụng phụ khác bạn học basic rồi thì chắc đã biết.
  • Application là một ứng dụng riêng biệt khác được cài trên điện thoại.
  • Service là dịch vụ.

2. Service trong android là gì?

  • Service là một thành phần chạy ngầm, nó thực hiện các tác vụ trong 1 thời gian dài. Các đặc điểm cần nhớ sau:
  • Service có vòng đời như activity ứng dụng thực tế đó là chạy ứng dụng nghe nhạc…
  • Service không có giao diện để người dùng tương tác.
  • Một thành phần ứng dụng khác có thể chạy 1 service. Ví dụ như 1 Activity có thể start 1 service.
  • Chúng ta có thể gắn 1 một thành phần ứng dụng (Activity chẳng hạn) với 1 service để tươngtác với service đó và thực hiện liên tiến trình (ipc) – ipc là gì? bạn cần tìm hiểu thêm nếu chưa có kinh nghiệm và kiến thức về IPC, mình chưa có kinh nghiệm lập trình ipc chỉ biết qua nó là hành động trao đổi dữ liệu giữa các process riêng biệt – hệ điều hành tạo ra các process để quản lý ứng dụng mà.
  • Ví dụ ứng dụng thực tế: xử lý ngầm các kết nối mạng, chạy nhạc, đọc – ghi file, giao tiếp với ContentProvider.

3. Service trong android có mấy loại?

  • Có 2 loại service là started service (không bị ràng buộc) và bound (ràng buộc).

  • Loại 1 là: Started là một thành phần ứng dụng gọi phương thức startService (ví dụ activity gọi phương thức startService) thì service đấy sẽ chạy mãi mãi dù thành phần ứng dụng gọi phương thức startService vừa nãy có bị hủy đi chăng nữa (trường hợp này là activity bị destroy) hay là ta chuyển sang activity khác hay ứng dụng khác. Thông thường cái loại này chạy 1 nhiệm vụ đơn lẻ và nó không trả về kết quả cho thành phần ứng dụng gọi phương thức startService (trường hợp này là activity). Điều này ứng dụng vào việc down và upload file qua mạng thì khi kết thúc nó sẽ tự hủy, hoặc đang down và upload chúng ta cũng có thể hủy.

  • Cái loại này hay còn gọi là Unbound không ràng buộc (do start và stop không quan tâm kết quả trả về)

  • Loại 2 là: Bound là ràng buộc có kết quả trả về dùng trong thực tế là khi muốn tua nhạc chẳng hạn.

  • Nó được ràng buộc khi một thành phần ứng dụng gọi phương thức bindService.
  • Bound service tương tự mô hình client – server máy khách – máy chủ, cho phép các thành phần app như activity tương tác với service.
  • Loại này có gửi nhận kêt quả thì đương nhiên nó cũng phải quan tâm đến kết quả trả về.
  • Loại service này chỉ chạy khi 1 thành phần app được ràng buộc với nó, nhiều thành phần app có thể kết hợp (ràng buộc) với 1 service tại 1 thời điểm. Nhưng tất cả thành phần app đấy hủy ràng buộc thì service bị chết. (điều này gây ra vấn đề khi làm ứng dụng nghe nhạc với kiều service này thì khi ấn nút back thì service cũng chết) – đọc thêm ở phần bình luận của bài viết này https://nguyenkhoaninh.wordpress.com/2014/07/10/androidbasic-bai-2-service-trong-android-phan-2-boundservice
  • Trong tài liệu của google có nói là họ hướng dẫn tạo 2 loại này 1 cách riêng biệt nhưng cũng có thể kết hợp 2 loại này với nhau. Nó có thể startService rồi sau đó bindService, vấn đề đơn giản đó là liệu bạn thực hiện 2 phương thức callback onStartCommand hay là onBind.

4. Service trong android cần chú ý gì?

  • Chúng ta có thể khai báo private hoặc public 1 Service trong file manifest. Phạm vi private (local) là truy cập trong ứng dụng của mình còn public (remote) sẽ cho app khác truy cập.

  • Service không phải là một luồng, nó là thành phần trong ứng dụng android, trong service bạn có thể tạo ra các thread.

  • Chú ý từ google: 1 Service sẽ chạy trên Main Thread của cái Process mà nó chứa. Tức là Process -> Main Thread -> Service. Service không tạo thread hay process riêng cho nó trừ khi bạn tạo. CPU-intensive work or blocking operations – cái này ý là gì mình không hiểu nhưng google họ bảo là chạy ứng dụng nhạc MP3 có chức năng chạy lại bài nhạc thì nên tạo ra 1 thread khác. Nếu dùng như thế mình sẽ giảm được rủi ro crash app.

  • Để giao tiếp activity với service dùng Binder, Messenger, AIDL. Do có mô hình Client – Server nên cần dùng các cách này để các thành phần ứng dụng khác có thể giao tiếp như 1 client với server. Ví dụ: Activity là client – Service là Server – Binder là trung gian giao tiếp.

Tạm thời lý thuyết đến đây đã :)

Các bài viết không xem thì tiếc:

Chia sẻ là sexy

dotrinh

Một lập trình viên dũng cảm, hòa đồng, luôn sống tích cực và anh ấy quay tay khỏe và khéo trong môn bi lắc :) Xem thêm thông tin tại trang -> Giới thiệu

Thảo luận

This site uses Akismet to reduce spam. Learn how your comment data is processed.