Запуск UIthread без AsyncTask - PullRequest
       15

Запуск UIthread без AsyncTask

0 голосов
/ 06 октября 2011

У меня есть задача, которая занимает около 10 секунд в потоке пользовательского интерфейса во время инициализации моего приложения. Я решил вместо этого поместить его в фоновый поток и показать заставку, пока это происходило ... Я получил это с помощью AsyncTask ... однако из-за того, что приоритет AsyncTasks жестко задан настолько низко, и я не могу найти его для увеличения, задача пошла от 10 секунд до нескольких минут.

Итак, у меня вопрос: как запустить задачу в потоке без пользовательского интерфейса без AsyncTask? Все, что я до сих пор пробовал, похоже, выполняется на задаче пользовательского интерфейса, которая не позволяет отображать экран SplashScreen до тех пор, пока задача не будет выполнена.

Итак, как мне создать поток, запустить его в потоке без пользовательского интерфейса? Я предполагаю, что должен быть параметр, отличный от AsyncTask, но пока я его не нашел ... кажется, что обработчики просто работают в пользовательском интерфейсе, как и стандартные потоки / runnables. Это должно быть возможно, но я просто не понимаю этого.

Ответы [ 2 ]

10 голосов
/ 06 октября 2011

Поскольку у вас уже работает AsyncTask, возможно, вы могли бы просто поднять его приоритет изнутри doInBackground():

protected Void doInBackground() {
    Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
    /* do the work */
}

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

1 голос
/ 06 октября 2011

Просто создайте Thread, установите любой приоритет и start() его. Или используйте Runnable и Executor. Те не будут работать в потоке пользовательского интерфейса. Если вам нужно уведомить пользовательский интерфейс о завершении фоновой работы, создайте Handler перед запуском потока и передайте его в Thread/Runnable.

...