Я разработал приложение для отображения некоторого текста в определенных интервалах на экране эмулятора Android. Я использую Handler
класс. Вот отрывок из моего кода:
handler = new Handler();
Runnable r = new Runnable() {
public void run() {
tv.append("Hello World");
}
};
handler.postDelayed(r, 1000);
Когда я запускаю это приложение, текст отображен только однажды. Почему?
Простое исправление для вашего примера:
handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
tv.append("Hello World");
handler.postDelayed(this, 1000);
}
};
handler.postDelayed(r, 1000);
Или мы можем использовать, например, обычный поток (с исходным Runner):
Thread thread = new Thread() {
@Override
public void run() {
try {
while(true) {
sleep(1000);
handler.post(this);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
Вы можете рассматривать свой запускаемый объект просто как команду, которая может быть отправленным в очередь сообщений для выполнения, а обработчик - просто вспомогательный объект, используемый для отправки этой команды.
Более подробная информация здесь http://developer.android.com/reference/android/os/Handler. html