Я делаю нечто подобное в моем приложении для Android;Я обновляю некоторые данные в моем интерфейсе каждые 10 секунд.Есть много способов сделать это, но я решил использовать Handler
, потому что это очень просто реализовать:
Thread timer = new Thread() {
public void run () {
for (;;) {
// do stuff in a separate thread
uiCallback.sendEmptyMessage(0);
Thread.sleep(3000); // sleep for 3 seconds
}
}
});
timer.start();
...
private Handler uiCallback = new Handler () {
public void handleMessage (Message msg) {
// do stuff with UI
}
};
Как вы, возможно, знаете, вы не можете запускать периодические функции, подобные этой, в потоке пользовательского интерфейса,потому что это заблокирует пользовательский интерфейс.Это создаст новый Thread
, который отправит сообщение в пользовательский интерфейс, когда это будет сделано, поэтому вы можете обновить свой пользовательский интерфейс новыми результатами того, что делает ваша периодическая функция.
Если вам не нужно обновлятьПользовательский интерфейс с результатами этой периодической функции, вы можете просто проигнорировать вторую половину моего примера кода и просто создать новый Thread
, как показано.Однако, будьте осторожны: если вы изменяете переменные, совместно используемые этим новым Thread
и пользовательским интерфейсом, у вас возникнут проблемы, если вы не синхронизируете.В общем случае многопоточность - это не та область, в которой вы хотите игнорировать «хорошие методы программирования», потому что вы получите странные, непредсказуемые ошибки и будете проклинать вашу программу.
-tjw