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);
Другие вопросы по тегам