Это не будет работать.
Поскольку новый поток, который вы создаете, не является потоком пользовательского интерфейса, вы не можете обновить интерфейс (задающий текст текстового вида) в этом потоке.
Лучшим способом для этого было бы использовать класс android.os.Handler
. Он имеет метод postDelayed
, который будет выполнять Runnable
с задержкой. Here - это документы.
В качестве альтернативы, вы можете использовать этот Timer
класс, который я написал, что инкапсулирует Handler
экземпляр и имеет простой интерфейс:
import android.os.Handler;
public class Timer {
private Handler handler;
private boolean paused;
private int interval;
private Runnable task = new Runnable() {
@Override
public void run() {
if (!paused) {
runnable.run();
Timer.this.handler.postDelayed (this, interval);
}
}
};
private Runnable runnable;
public int getInterval() {
return interval;
}
public void setInterval(int interval) {
this.interval = interval;
}
public void startTimer() {
paused = false;
handler.postDelayed (task, interval);
}
public void stopTimer() {
paused = true;
}
public Timer (Runnable runnable, int interval, boolean started) {
handler = new Handler();
this.runnable = runnable;
this.interval = interval;
if (started)
startTimer();
}
}
Gist
Вы, вероятно, использовать его как это:
Runnable run = new Runnable() {
public void run() {
textwel.setText("Welcome");
}
};
Timer timer = new Timer(run, 4000, true);
PS установка текста текста в «Добро пожаловать» каждые 4 секунды бессмысленна.
То плохой подход человека. Потому что это также приведет к исключению nullpointer, когда View будет уничтожен, а ваш фоновый поток снова вызовет View late. – Enzokie
Используйте для этого обработчик. – Enzokie