|
Проблема с RunOnUiThread
|
|||
---|---|---|---|
#18+
Раньше у меня было Activity, содержащее два LinearLayout. При открытии этого активити, один LinearLayout отображался сразу, а другой спустя несколько секунд и всё это время на месте незагруженного LinearLayout крутился ProgressBar (сделано это было через AsyncTask). При нажатии кнопки "назад" из-за недогрузившегося LinearLayout'a приложение часто вылетало с ошибкой и мне сказали изменить метод onPostExecute в AsyncTask, добавить в него runOnUiThread, чтобы активити успело загрузится полностью и не было ошибки, если вдруг пользователь нажмет "назад" раньше времени. Я это сделал, всё работает, приложение вроде не вылетает, но теперь Активити больше не грузится "по частям". Нажимаешь кнопку, чтоб открыть его - после этого проходит несколько секунд и оно показывается сразу полностью со всеми загруженными лайаутами, нет больше ProgressBar'а, хотя я его оставил. Как это исправить? Первый LinearLayout создавался в методе onCreate() и только второй в AsyncTask через runOnUiThread, так почему я не вижу вначале первый лайаут и только потом второй, а сразу оба, при этом приходится ждать. вот код класса, реализующего AsyncTask: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2014, 20:12 |
|
Проблема с RunOnUiThread
|
|||
---|---|---|---|
#18+
потому что тыкаешь пальцем в небо, не пытаясь понять, что делаешь. метод onPostExecute выполняется в GUI-потоке приложения и помещая туда "долгоиграющий" код ты убиваешь смысл AsyncTask на корню. а runOnUiThread в этом методе - это вообще масло масленное по вышеуказанной причине. код должен оставаться в doInBackground, при обрыве процесса AsyncTask нужно прерывать, а тот в свою очередь должен во время длительной процедуры проверять не прерван ли он. кроме того есть еще муторные примеры как восстанавливать работу AsyncTask при повороте экрана и прочее, но для начала разберись со штатной остановкой ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2014, 20:39 |
|
Проблема с RunOnUiThread
|
|||
---|---|---|---|
#18+
кстати да. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2014, 20:50 |
|
Проблема с RunOnUiThread
|
|||
---|---|---|---|
#18+
chpashaпотому что тыкаешь пальцем в небо, не пытаясь понять, что делаешь. метод onPostExecute выполняется в GUI-потоке приложения и помещая туда "долгоиграющий" код ты убиваешь смысл AsyncTask на корню. а runOnUiThread в этом методе - это вообще масло масленное по вышеуказанной причине. код должен оставаться в doInBackground, при обрыве процесса AsyncTask нужно прерывать, а тот в свою очередь должен во время длительной процедуры проверять не прерван ли он. кроме того есть еще муторные примеры как восстанавливать работу AsyncTask при повороте экрана и прочее, но для начала разберись со штатной остановкой У меня там два класса, реализующих AsyncTask, один делает LinearLayout, другой файлы грузит. Метод Код: java 1. 2. 3. 4. 5.
останавливает загрузку файлов, в нем есть некоторые условия, которые не подойдут для того AsyncTask, который делает LinearLayout. я понимаю, что это всё масло масляное и г*внокод, но как сказали сделать, так и делаю, опыта очень мало что-то нормальное изобразить ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2014, 20:59 |
|
Проблема с RunOnUiThread
|
|||
---|---|---|---|
#18+
Витяй1991я понимаю, что это всё масло масляное и г*внокод, но как сказали сделать, так и делаю хрень подсказали, а скорее всего ты так же внятно объяснил как и здесь ("про ошибку") - тебе и протелепатили, впрочем применительно к AsyncTask все равно не правильно, нафиг ему runOnUI не впился, у него свой publishProgress и onPostExecute есть. я тебе описал как надо - работника прерывать, в самом работнике проверять isCancelled() ну и кроме того смотреть в чем конкретно ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2014, 21:08 |
|
|
start [/forum/topic.php?fid=13&fpage=26&tid=1331669]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 122ms |
0 / 0 |