Отдельные темы для пользовательского интерфейса и логики - Android - PullRequest
0 голосов
/ 25 января 2012

Я хочу создать отдельные потоки для реализации логики ядра и обновления графического интерфейса. Оба потока не должны делиться данными с ними напрямую. Для этого я хочу создать векторную очередь с синхронизированными методами get () и put (). Предположим, что если событие onClick происходит в потоке графического интерфейса, оно уведомляет основной поток о получении события OnClick. Таким образом, основной поток реализует что-то и помещает результат в вектор. На этом этапе поток графического интерфейса уведомляется о полученном результате и извлекает его и обновляет экран. Я не могу понять, как это сделать. Есть ли способ, которым это может быть реализовано?

1 Ответ

0 голосов
/ 25 января 2012

Вы можете сделать это, как в любой другой среде или среде. Android api предлагает вам множество высокоуровневых способов обработки многопоточных приложений, таких как вы описали (AsyncTask, Handler / Thread / Runnable и т. Д.), Но вы также можете поместить их в свою очередь обработки. Я сделал это недавно, когда создал логическую очередь для обработки, и когда я что-то помещаю в очередь, я запускаю метод, который проверяет мою очередь на предмет элементов и обрабатывает их в фоновом потоке. Вы можете уведомить систему о завершении обработки, отправив широковещательные намерения и зарегистрировав IntentFilters на уровне Activity (не забудьте отменить регистрацию), или вы можете реализовать свои собственные интерфейсы прослушивателя, как это происходит в структуре пользовательского интерфейса Android с событиями UI в Views

В основе этого, как бы вы ни заключали его, AsyncTask позволяет действительно легко переключаться между фоновыми потоками и основным потоком пользовательского интерфейса. onPreExecute, onProgressUpdated и onPostExecute все выполняются в потоке пользовательского интерфейса, а doInBackground запускается в фоновом потоке, который автоматически создается для вас. Не становится легче, чем это

...