2010-11-04 1 views
0

Я хотел бы написать на экран Android, как если бы это был простой терминал. Я хочу, чтобы вывод отображался в момент его написания. Мое приложение делает несколько интенсивных всплесков процессора, немного записывает на экран и продолжает. Я использую адаптер списка для вывода. Проблема заключается в том, что вывод не отображается, пока активность не исчезнет.Как писать на экран и выводить вывод до того, как активность перестанет работать

ответ

1

Предполагаю, что вы делаете все это в onCreate(). Попробуйте сделать это как-то так:

  1. OnCreate начинает AsyncTask (см developer.android.com -> AsyncTask)
  2. перезаписи doInBackground с ресурсоемким вспениванием
  3. всякий раз, когда вы хотите написать на терминал (в вашем случае listview) вызовите publishProgress()
  4. перезапишите onProgressUpdate и дайте ему добавить текст в ваш адаптер списка.

Возможно, вы могли бы использовать простой текстовый просмотр, чтобы отображать ваши вещи с помощью прокрутки. или, возможно, WebView. Я не уверен, что было бы лучше.

Хороший думаю смотреть на может быть на Android эмулятор терминала, для которых источник может быть найден здесь: github.com/jackpal/Android-Terminal-Emulator

Они, кажется, используют свои собственные View, который может можно найти здесь: https://github.com/jackpal/Android-Terminal-Emulator/blob/master/src/jackpal/androidterm/Term.java#L2527

Надеюсь, это поможет.

+0

Если вы работаете над этим решением. Я обнаружил, что publishProgress() должен быть вызван в том же блоке кода, что и doInBackground. Его нельзя вызвать каким-либо другим способом. – Xarph

+0

У меня также возникла проблема с вызовом другого метода из кода doInBackground code block. Простой вызов другого метода в файле создает исключение RuntimeException. – Xarph

+0

Я решил свою оригинальную проблему на основе ваших предложений. AsyncTask сделал трюк. Это была борьба, но я, наконец, получил все, что мне нужно. Я благодарю вас обоих за ваше ценное предложение. – Xarph

1

Для этого вы можете использовать AsyncTask.

AsyncTask заботится о работе с ЦП, не блокируя ваш пользовательский интерфейс. Механизм присутствует, чтобы сообщить о прогрессе в приложении, используя тип вашего выбора. В вашем случае задача может сообщать о ходе обновления в виде строк; приложение просто добавит эти строки в текстовое представление.

Смежные вопросы