2011-07-02 32 views
12

Ngoài thời gian thiết lập và chính xác (tức là nửa đêm) so với cài đặt trễ (tức là 24 giờ), sự khác nhau giữa việc sử dụng AlarmManagerScheduledExecutorService để chạy nhiệm vụ định kỳ là gì?Sự khác nhau giữa AlarmManager và ScheduledExecutorService

Trong trường hợp của tôi, tôi cần chạy một chút mã để kiểm tra dữ liệu mới mỗi đêm và tạo thông báo mới nếu có dữ liệu mới.

Cảm ơn!

Trả lời

33

ScheduledExecutorService chạy trong quy trình đăng ký của bạn. Nếu quá trình đăng ký bị chết, sẽ không có tác vụ theo lịch nào được chạy. Do đó sự cần thiết cho Service (vì vậy quá trình của bạn sống vượt ra ngoài hoạt động một phần hoạt động của vòng đời).

Trong khi AlarmManager là dịch vụ hệ thống quan trọng chạy suốt ngày. Và nếu đơn đăng ký của bạn đã lên lịch biểu và đã bị giết, thì AlarmManager có thể bắt đầu lại đơn đăng ký (qua số PendingIntent).

Và sự khác biệt lớn cuối cùng mà không ai đề cập ở đây là AlarmManager biết về WakeLock và quản lý nguồn điện. Điều này có nghĩa là AlarmManager có thể đánh thức thiết bị Android vào thời gian được chỉ định để chạy tác vụ được lên lịch. Trong khi ScheduledExecutorService không biết gì về quản lý năng lượng và sẽ chỉ bắt đầu nhiệm vụ khi thiết bị không ở chế độ ngủ sâu (tức là nó có thể đơn giản là bỏ lỡ thời gian).

+0

Có điều gì khác sẽ hoạt động khi thiết bị đang ở chế độ ngủ sâu .. Tôi đã thử Handler, Runnable Threads, không có gì hoạt động ở chế độ ngủ sâu. – DAC84

5

Tôi nghĩ rằng ScheduledExecutorService được gắn với quy trình của bạn và sẽ không hoạt động trong trường hợp quá trình của bạn bị giết. Ngược lại, AlarmManager được hệ điều hành quản lý để nó hoạt động ngay cả khi ứng dụng của bạn không hoạt động.

10

ScheduledExecutorService sẽ chỉ hoạt động nếu bạn có một số thành phần, chẳng hạn như Service, chạy mọi lúc. Do đó, nó chỉ nên được sử dụng trong trường hợp thành phần sẽ có trong bộ nhớ vì các lý do khác, thêm giá trị cho người dùng. Có một thành phần được trong bộ nhớ chỉ để xem đồng hồ đánh dấu bằng là lãng phí và một trong những lý do tại sao người dùng tấn công các nhà phát triển với kẻ giết nhiệm vụ và như vậy.

AlarmManager là dịch vụ hệ thống do OS cung cấp. Nó có thể khởi động một thành phần khi thời gian trôi qua. Do đó, bạn không cần phải chạy thành phần đó.

Trong trường hợp của tôi, tôi cần chạy một chút mã để kiểm tra dữ liệu mới mỗi đêm và tạo thông báo mới nếu có dữ liệu mới.

Đây là kịch bản rõ ràng cho AlarmManager.

Các vấn đề liên quan