setText не работает внутри цикла while
Это почему?
while (flag) {
outCPU.setText(getCpuInfo());
}
getCpuInfo возвращает строку, если я пытаюсь записать возвращение этого метода в журнал, есть все, что должно быть, но с textview ничего не происходит.
2 ответа
Это не будет работать... дисплей обновится после завершения функции. Попробуй это
boolean flag;
private void updateTextView(){
outCPU.setText(getCpuInfo());
if(flag){
outCPU.post(new Runnable(){
public void run(){
updateTextView();
}
});
}
}
private void your_function(){
if(flag){
outCPU.post(new Runnable(){
public void run(){
updateTextView();
}
});
}
}
Бесконечный цикл в потоке пользовательского интерфейса, вероятно, не очень хорошая идея. setText планирует операцию рисования, публикуя сообщения в очереди потока пользовательского интерфейса. К сожалению, тот же поток занят циклом. Вы можете использовать внутренний обработчик TextView для публикации Runnable в очереди потока пользовательского интерфейса. Например
private Runnable mRunnable = new Runnable() {
@Override
public void run() {
if (!flag) {
outCPU.removeCallbacks(this);
return;
}
outCPU.setText(getCpuInfo());
outCPU.postDelayed(this, 200);
}
};
и вместо вашего цикла while вы просто делаете
outCPU.post(mRunnable);