Tôi đang cố gắng để xây dựng một ứng dụng Android mà lặp đi lặp lại sẽ chạy một số quá trình mỗi 10 phút. Như tôi đã phát hiện ra Handlers
là đáng tin cậy hơn giờ hoặc lịch. Vì vậy, tôi sẽ phát triển ứng dụng của mình bằng cách sử dụng Handlers
bằng cách sử dụng các mã dưới đây.Trình xử lý Android cho tác vụ lặp lại - nó sẽ chồng lên nhau? Timer-nhiệm vụ VS handler VS báo động-manager
Tôi hơi lo ngại rằng các mã bên dưới sẽ tạo riêng biệt Handlers
mỗi khi tôi khởi động ứng dụng và giữ cho chúng chạy song song, có thể kể từ khi tôi đang tạo Handler
trên onCreate
.
Vì vậy, cách tốt nhất để giữ chỉ một duy nhất Handler
chạy ở chế độ nền tại một thời điểm?
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handler = new Handler(); // new handler
handler.postDelayed(runnable, 1000*60*10); // 10 mins int.
setContentView(R.layout.activity_pro__sms);
}
private Runnable runnable = new Runnable() {
@Override
public void run() {
/* my set of codes for repeated work */
foobar();
handler.postDelayed(this, 1000*60*10); // reschedule the handler
}
};
Chỉ cần tự hỏi: bối cảnh của 'công việc lặp đi lặp lại' của bạn là gì? Hoặc có lẽ tốt hơn cho biết: loại ứng dụng là gì? Nó có thể là một giả định rất hào phóng để nghĩ rằng người dùng sẽ chủ động sử dụng ứng dụng của bạn trong 10 phút tại một thời điểm (trừ khi nó giống như một trò chơi hay như vậy, do đó câu hỏi của tôi). Sử dụng 'Handler' trong khi ứng dụng của bạn * không * ở mặt trước, không thể thực hiện đúng hành động. –
Tại sao không sử dụng dịch vụ? –
Tôi không cần bỏ lỡ tác vụ bằng cách chạy ngay cả khi đang ở chế độ ngủ. Các dịch vụ có thể hoạt động trong khi ở chế độ chờ (ngủ) không? Hay tôi cần có khóa đánh thức. Điều gì về việc sử dụng tài nguyên của các dịch vụ so với AlarmManager (bây giờ tôi đang thử những thứ với trình quản lý báo động) –