Поточная обработка в Android

Я в настоящее время разрабатываю приложение для Android, оно должно загрузить содержание с Интернета. Я использую поток, чтобы сделать это и затем назвать runOnUiThread метод для обновления GUI.

  1. Я поместил меню обновления в него, если пользователь пытался обновить содержание, поток загрузки будет создан и запущен. Проблема состоит в том, что, как я могу управлять порядком потока, я должен принять ответ последнего запроса и отказаться от запросов предыдущего сообщения, если бы были некоторые другие запросы, все еще работающие, потому что параметры запроса, возможно, были изменены пользователем. В настоящее время я использовал threadId, чтобы сделать эту вещь, когда поток закончился, это проверит свой threadId, если это было последнее перес сердечником, это затем берет на себя управление, и представьте ответ. Мой вопрос, это - там какое-либо другое надлежащее лучшее решение для этого?
  2. Я должен остановить потоки когда пользовательский выход приложение? Я помню, что в некоторой книге было сказано, что это разве пробует, не останавливают поток вручную и ожидают сам, конец является хорошей практикой, которая верна? Я должен остановить их путем вызова метода "остановки" или "прерывания"?
  3. Я прочитал некоторые документы вокруг поточной обработки в Android и нашел класс HandlerThread, что это? В какой ситуации я должен использовать его?
9
задан virsir 12 June 2010 в 19:11
поделиться

3 ответа

Вместо того, чтобы запускать новый поток для каждого действия обновления, я бы создал один поток для всей фоновой загрузки, который зацикливается и загружает контент, выстроенный в очередь. Это гарантирует, что вы не загружаете контент одновременно, а также экономит ресурсы.

В графическом интерфейсе вы просто ставите в очередь запрос на обновление всякий раз, когда пользователь предлагает вам, и можете прервать текущую загрузку, вызвав HttpRequestBase.abort в экземпляре метода http. Фоновый поток должен получить и перехватить SocketException и перейти к следующему запросу в очереди.

Чтобы завершить фоновый поток, вам просто нужно завершить его цикл. Вы можете использовать классы Looper и Handler , чтобы помочь вам со всем вышеперечисленным, упомянутый вами класс HandlerThread - это просто удобный класс для создания потока, который имеет лупер .

Проблема с прерыванием потока заключается в том, что оно не вырвет вас из блокирующего запроса ввода-вывода, а правильная обработка InterruptException может быть сложной. Поэтому, в зависимости от ситуации, я бы сказал, что да, лучше завершить поток, вернувшись из его метода run .

4
ответ дан 3 November 2019 в 04:41
поделиться

Вы можете использовать IntentService для запуска фоновых операций, служба будет работать как «обработчик рабочей очереди» и будет выполнять ваши вызовы по порядку.

1
ответ дан 3 November 2019 в 04:41
поделиться

На этой неделе я обнаружил AsyncTask и заменяю Thread на AsyncTask в каком-то месте своей программы,
Здесь у вас есть документ и образец, очень простые в использовании:
http://developer.android.com/reference/android/os/AsyncTask.html
, когда я использовал поток, графический интерфейс был заблокирован, а теперь он не заблокирован.
И можно отменить AsyncTask (но я никогда не пробовал)

2
ответ дан 3 November 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: