Приоритет интернет соединения

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
Аватара пользователя
sanu0074
Сообщения: 80
Зарегистрирован: 30 июн 2013, 20:42
Контактная информация:

Приоритет интернет соединения

Сообщение sanu0074 » 24 июл 2013, 18:03

Можно ли контролировать приоритет интернет соединения в приложении?

Например есть два activity A и B, и есть медленное интернет-соединение скоростью 8 Кбайст\сек.
Загружаем activity A, получаем от сервера массив с ссылками на изображения которые нужно загрузить в activity A, нарисовали (уже загрзилось все кроме изображений) структуру активити, листаем экран, в этот момент по очереди грузятся куча картинок, выбираем какайлибо элемент и загружается activity B, при этом activity A осталось в фоне. Activity B тоже имеет кучу картинок и хочет их загрузить, но неможет, т.к. весящее в фоне activity A еще грузит оставшиеся незагруженные картинки, и нам нужно ждать пока activity B начнет грузить свои изображения, это очень долго при медленном соединении и занимает много времени. Как выкрутиться из такой ситуации?
Нажно чтоб находясь в activity B, весь приоритет соединения передался именно на него, чтобы в activity A на тот момент пока оно в фоне перестало все грузиться....
Или можно только прихлопнуть task который грузит картинки по очереди в activity A перед открытием activity b? (если это выход из положения, то как правильно убить task?)

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Приоритет интернет соединения

Сообщение KamiSempai » 24 июл 2013, 18:17

Прихлопывать не желательно. Обычно использую специальную булевую переменную отвечающую за остановку этого таска. В цикле загрузки устанавливается дополнительное условие на истинность этой переменной. Если переменная ложь, загрузку нужно остановить. Останавливать загрузку лучше в onStop, а возобновлять в onStart.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
sanu0074
Сообщения: 80
Зарегистрирован: 30 июн 2013, 20:42
Контактная информация:

Re: Приоритет интернет соединения

Сообщение sanu0074 » 24 июл 2013, 18:37

KamiSempai писал(а): Если переменная ложь, загрузку нужно остановить. Останавливать загрузку лучше в onStop, а возобновлять в onStart.
А как именно саму загрузку остановить/возобновить не убив task?

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Приоритет интернет соединения

Сообщение KamiSempai » 25 июл 2013, 15:16

sanu0074 писал(а):А как именно саму загрузку остановить/возобновить не убив task?
Можно сделать лок при помощи synchronised и методов wait() и notify(): http://crypto.pp.ua/2010/06/instrukciya ... ed-v-java/

PS: По поводу остановки я тупанул немного. В AsyncTask можно не создавать переменной, там есть метод cancel для остановки и метод isCancelled() для проверки. Сам AsyncTask не остановится, нужно обязательно проверять при помощи isCancelled и останавливать его самому. В Thread есть аналогичные методы interput и isInterputed.
Но для паузы лучше сделать доп переменную.
В идеале при паузе activity делать паузу загрузки, а при onDestroy остановку. Естественно, при остановке нужно будет не забыть сделать notify потоку, а иначе он так и будет в паузе даже после вызова cancel.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Ответить