AlarmManger trong Android

Giới thiệu

AlarmManager trong Android là một cầu nối giữa ứng dụng và alarm service của hệ thống Android. Nó có thể gửi một bản tin broadcast tới ứng dụng của bạn ở thời điểm đã được lên lịch trước đó. Sau đó ứng dụng của bạn có thể thực hiện bất kỳ tác vụ nào cần thiết ở thời điểm đó.

Để dễ hình khi nói tới AlarmManager , chúng ta nghĩ ngay tới ứng dụng báo thức. Đây chính là ví dụ điển hình, bạn đặt một lịch đến đúng 7h sáng thì chuông reo để còn đi làm. Dù ứng dụng của bạn đã bị bạn tắt, kill … nhưng đúng 7h sáng là nó sẽ đổ chuông báo .

Cùng với sự trợ giúp của PendingIntent và  Intent, một bundle đóng gói các thông tin cần thiết sẽ được gửi cùng broadcast hệ thống tới ứng dụng của bạn khi thời gian đặt lịch đến.

 

Nội dung chính

 

1. Thiết lập AlarmManger trong ứng dụng

Có 2 bước để khởi tạo AlarmManager trong Android, đó là:

  • Tạo một BroadcastReceiver để nhận các bản tin broadcast từ hệ thống, tất nhiên bạn cần phải đăng ký trong xml
  • Đăng ký alarm với Alarm hệ thống ALARM_SERVICE thông qua PendingIntent kèm thời gian đặt trước.

Bước 1 : Tạo BroadcastReceiver để nhận broadcast từ hệ thốngKhai báo receiver trong manifests.xml

Để alarm hiển thị cả khi màn hình kháo hay đã kill app ta thêm các permission vào file manifest

Bước 2 , Tạo một alarm với thời gian đặt trước

Ở ví dụ này ta set sau khoảng 10s sau khi mở app thì sẽ gửi một intent tới AlarmReceiver và thông báo ra màn hình : “Alarm is ringing!!”

Tại sao lại dùng PendingIntent?

Bởi vì đây là loại Intent đặc biệt, thay vì tác vụ đích cần thực hiện ngay Intent khi vừa gửi thì với PendingIntent, tác vụ sẽ thực hiện sau một khoảng thời gian nào đó .

 

2 . Xử lý sự kiện Alarm

AlarmManager cung cấp 2 cách để lắng nghe một alarm broadcast. Đó là:

  • Local listener (AlarmManager.OnAlarmListener)
  • BroadcastReceiver được quy định tại Intent bọc bên trong một PendingIntent

Việc triển khai AlarmManager.OnAlarmListener() tương tự như cách sử dụng PendingIntent. Đơn giản là yêu cầu một callback xử lý sự kiện alarm trong đó.

Có một hạn chế với cách sử dụng AlarmManager.OnAlarmListener() đó là nó không thể hoạt động nếu Activity/Fragment tương ứng bị destroy. Ngoài ra, dùng PendingIntent còn có ưu điểm là ứng dụng có thể nhận broadcast alarm ngay cả khi ứng dụng bị kill bởi người dùng trước đó.

 

3,Những cách thiết lập thời gian schedule cho alarm manager Android

  • set() : lên lịch thời gian nhưng cho phép linh động Android thời điểm kích hoạt
  • setExact() : yêu cầu Android kích hoạt chính xác thời điểm

 

4,Cách hủy AlarmManger trong Android

Để hủy một Alarm, đơn giản là bạn gọi hàm cancel()

5 , Ưu , nhược điểm của AlarmManger

  • Ưu điểm
    • Độc lập ứng dụng
    • Tiết kiệm năng lượng
    • Độ chính xác tùy chỉnh : Bạn có thể thiết lập độ chính xác của alarm với các lựa chọn như RTC, RTC_WAKEUP, ELAPSED_REALTIME, và ELAPSED_REALTIME_WAKEUP
    • Được tích hợp sẵn trong hệ thống
  • Nhược điểm
    • Độ chính xác không còn cao trên các phiên bản Android mới
    • Không thích hợp cho các tác vụ nền dài hạn

6, Kết luận

AlarmManager trong Android cung cấp một cách hiệu quả để lên lịch thực thi code ở thời điểm cụ thể trong tương lai. Tuy nhiên, dù nó có những ưu điểm như độc lập với ứng dụng và tiết kiệm năng lượng, các phiên bản Android mới và sự ra đời của các công cụ như WorkManager đã giảm bớt sự ưu việt của nó, đặc biệt trong việc đảm bảo độ chính xác và tính tương thích. Do đó, khi lựa chọn giải pháp lên lịch, cần cân nhắc kỹ lưỡng dựa trên yêu cầu và ngữ cảnh cụ thể của ứng dụng.

 

7 , Tài liệu tham khảo

https://developer.android.com/reference/android/app/AlarmManager