Dịch vụ Android là workhorses của nền tảng. Chúng cho phép các ứng dụng chạy các tác vụ chạy dài và cung cấp chức năng cho các ứng dụng bên ngoài. Thật không may, kể từ khi họ chạy trong nền và không trực quan rõ ràng cho các nhà phát triển, họ có thể là một nguồn nhức đầu lớn. Nếu bạn đã thấy ANR (hoạt động không phản hồi) hoặc đã tự hỏi tại sao một dịch vụ đang chạy khi không nên, dịch vụ được triển khai kém có thể là vấn đề.
ANR sợ hãi Hãy xem hai dịch vụ lỗi chính gây ra: ANR. Điều này làm gián đoạn trải nghiệm của người dùng và cung cấp cho người dùng tùy chọn để buộc đóng. Điều này có thể dẫn đến việc người dùng gỡ cài đặt ứng dụng của bạn hoặc quá trình nền đang ở trạng thái bị gián đoạn. Lý do cho điều này là các dịch vụ được khởi chạy từ chuỗi cuộc gọi của bạn-- thường đây là luồng giao diện người dùng. Luôn chạy dịch vụ. Mặc dù Android cung cấp các cơ chế để lên lịch và dừng dịch vụ, nhưng không phải tất cả các nhà phát triển đều tuân thủ các nguyên tắc này. Trong thực tế, rất nhiều ví dụ tôi đã thấy thậm chí không đề cập đến việc dừng dịch vụ của bạn. Điều này có thể dẫn đến hiệu suất tổng thể chậm hơn, sự nhầm lẫn của người dùng và mức tiêu hao pin. Tôi tưởng tượng các nhà phát triển Android tại Google thấy rằng điều này đã trở thành một vấn đề và giới thiệu lớp IntentService trong Android 1.5. Lớp IntentService giải quyết các vấn đề trên và tóm tắt tất cả việc quản lý các luồng và dịch vụ dừng lại từ nhà phát triển. Nó rất dễ dàng và mạnh mẽ của các nhiệm vụ offloading từ chủ đề chính của ứng dụng.
Tại sao tôi sử dụng IntentService tốt hơn để "xử lý cảnh báo được kích hoạt bởi AlarmManager/BroadcastReceiver đã đăng ký manifest", những gì nó có thể làm Dịch vụ thông thường sẽ không thể? – rayman
@rayman: nó xử lý chuỗi nền và hàng đợi công việc cho bạn. – CommonsWare
Tôi nghĩ rằng tôi đã nhận nó, nhưng mybe bạn biết một số ví dụ tôi có thể kiểm tra, vì vậy tôi có thể thấy sự khác biệt nhỏ giữa việc sử dụng nó hay không? cảm ơn. – rayman