có bộ đếm thời gian của java có thể được sử dụng , nhưng như câu hỏi yêu cầu cách tốt hơn (cho thiết bị di động). Điều này được giải thích ở đây .
Vì lợi ích của StackOverflow:
Vì Timer tạo một luồng mới, nó có thể được coi là nặng
nếu tất cả những gì bạn cần là nhận được một cuộc gọi lại trong khi hoạt động đang chạy Trình xử lý có thể được sử dụng cùng với một
Runnable :
private final int interval = 1000; // 1 Second
private Handler handler = new Handler();
private Runnable runnable = new Runnable(){
public void run() {
Toast.makeText(MyActivity.this, "C'Mom no hands!", Toast.LENGTH_SHORT).show();
}
};
...
handler.postAtTime(runnable, System.currentTimeMillis()+interval);
handler.postDelayed(runnable, interval);
hoặc một tin nhắn
private final int EVENT1 = 1;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case Event1:
Toast.makeText(MyActivity.this, "Event 1", Toast.LENGTH_SHORT).show();
break;
default:
Toast.makeText(MyActivity.this, "Unhandled", Toast.LENGTH_SHORT).show();
break;
}
}
};
...
Message msg = handler.obtainMessage(EVENT1);
handler.sendMessageAtTime(msg, System.currentTimeMillis()+interval);
handler.sendMessageDelayed(msg, interval);
ở một mặt lưu ý cách tiếp cận này có thể được sử dụng, nếu bạn muốn chạy một đoạn mã trong luồng UI từ một luồng khác.
nếu bạn cần để có được một cuộc gọi trở lại ngay cả khi hoạt động của bạn không hoạt động sau đó, bạn có thể sử dụng một AlarmManager