ฉันไม่แน่ใจ แต่ตามความรู้ของฉันฉันแบ่งปันมุมมองของฉัน ฉันยอมรับคำตอบที่ดีที่สุดเสมอหากฉันผิด
ตัวจัดการสัญญาณเตือน
Alarm Manager จะล็อคการปลุกของ CPU ไว้ตราบเท่าที่onReceive()
วิธีการของตัวรับสัญญาณเตือนกำลังดำเนินการอยู่ สิ่งนี้รับประกันได้ว่าโทรศัพท์จะไม่เข้าสู่โหมดสลีปจนกว่าคุณจะจัดการการออกอากาศเสร็จสิ้น เมื่อonReceive()
กลับมาตัวจัดการสัญญาณเตือนจะปลดล็อกการปลุกนี้ ซึ่งหมายความว่าในบางกรณีโทรศัพท์จะเข้าสู่โหมดสลีปทันทีที่onReceive()
วิธีการของคุณเสร็จสมบูรณ์ หากเครื่องรับสัญญาณเตือนของคุณโทรContext.startService()
มาอาจเป็นไปได้ว่าโทรศัพท์จะเข้าสู่โหมดสลีปก่อนที่จะเปิดบริการที่ร้องขอ เพื่อป้องกันการนี้ของคุณBroadcastReceiver
และService
จะต้องดำเนินการตามนโยบายการปลุกล็อคแยกต่างหากเพื่อให้มั่นใจว่าโทรศัพท์ยังคงทำงานจนกว่าบริการจะกลายเป็นใช้ได้
หมายเหตุ: Alarm Manager มีไว้สำหรับกรณีที่คุณต้องการให้รหัสแอปพลิเคชันของคุณทำงานในช่วงเวลาที่กำหนดแม้ว่าแอปพลิเคชันของคุณจะไม่ทำงานในขณะนี้ก็ตาม สำหรับการทำงานตามเวลาปกติ (เห็บการหมดเวลา ฯลฯ ) การใช้ Handler นั้นง่ายกว่าและมีประสิทธิภาพกว่ามาก
เครื่องจับเวลา
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
synchronized public void run() {
\\ here your todo;
}
}}, TimeUnit.MINUTES.toMillis(1), TimeUnit.MINUTES.toMillis(1));
Timer
ScheduledThreadPoolExecutor
มีข้อบกพร่องบางอย่างที่จะแก้ไขได้โดย ดังนั้นจึงไม่ใช่ทางเลือกที่ดีที่สุด
ScheduledThreadPoolExecutor
คุณสามารถใช้java.util.Timer
หรือScheduledThreadPoolExecutor
(แนะนำ) เพื่อกำหนดเวลาการดำเนินการที่จะเกิดขึ้นในช่วงเวลาปกติบนเธรดพื้นหลัง
นี่คือตัวอย่างโดยใช้หลัง:
ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate
(new Runnable() {
public void run() {
// call service
}
}, 0, 10, TimeUnit.MINUTES);
ดังนั้นฉันจึงชอบ ScheduledExecutorService
แต่ยังคิดเกี่ยวกับว่าถ้าปรับปรุงจะเกิดขึ้นในขณะที่โปรแกรมของคุณทำงานคุณสามารถใช้Timer
เป็นข้อเสนอแนะในคำตอบอื่น ๆ ScheduledThreadPoolExecutor
หรือใหม่กว่า หากแอปพลิเคชันของคุณจะอัปเดตแม้ว่าจะไม่ได้ทำงานคุณควรไปกับไฟล์AlarmManager
.
Alarm Manager มีไว้สำหรับกรณีที่คุณต้องการให้รหัสแอปพลิเคชันของคุณทำงานในช่วงเวลาที่กำหนดแม้ว่าแอปพลิเคชันของคุณจะไม่ทำงานก็ตาม
โปรดทราบว่าหากคุณวางแผนที่จะอัปเดตเมื่อปิดแอปพลิเคชันของคุณทุกๆสิบนาทีจะค่อนข้างบ่อยและอาจใช้พลังงานมากเกินไป