Java BufferedReader проверяет, заблокирует ли readLine () - PullRequest
0 голосов
/ 24 января 2019

Мне нужно создать действие, которое бы отображало журналы Android в режиме реального времени:

//In background thread:
Process process = Runtime.getRuntime().exec("logcat");
BufferedReader bufferedReader = new BufferedReader(
        new InputStreamReader(process.getInputStream()));

StringBuilder log=new StringBuilder();
String line = "";
while ((line = bufferedReader.readLine()) != null && !isInterrupted())
{
    log.append(line);
    mLoggerActivity.updateLog(log.toString()); 
}

...

public class LoggerActivity extends Activity
{
    private void updateLog(final String log) // Will be called from inner class
    {
        mUIThreadHadler.post
        (
            new Runnable()
            {
                @Override
                public void run()
                {
                    mLoggerView.setText(log);
                }
            }
        );
    }
...
}

Я думаю, что обновление пользовательского интерфейса в каждой строке неэффективно - но какие еще варианты у меня есть?Мне нужно что-то как bufferedReader.canReadLine () - так что я могу пакетное обновление StringBuilder перед публикацией log.toString () в основной поток.

...