Длительный процесс в отдельном интерфейсе обновления потоков - PullRequest
0 голосов
/ 20 июля 2011

Я заметил похожую проблему для dot NET, но моя проблема для Android, поэтому, возможно, решение выглядит иначе.

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

07-19 21:14:04.602: ERROR/Atjeews(283): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

Если я попытаюсь заблокировать поток пользовательского интерфейса и освободить его после завершения длительного процесса обновления пользовательского интерфейса, диалоговое окно хода выполнения не отобразится. Стоит ли вместо этого показывать диалог прогресса в отдельном потоке, или есть другое более простое решение?

Ответы [ 2 ]

1 голос
/ 20 июля 2011

Взято от разработчиков Android Процессы и потоки Страница:

Чтобы решить эту проблему, Android предлагает несколько способов доступа к потоку пользовательского интерфейса из других потоков. Вот список методов, которые могут помочь:

Activity.runOnUiThread (Runnable)
View.post (Runnable)
View.postDelayed (Runnable, long)

Вы можете просто создать в качестве аргумента анонимный Runnable, например post(new Runnable(){doWhatever();}), который будет делать все, что вы хотите в потоке пользовательского интерфейса.

1 голос
/ 20 июля 2011
...