Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 422
#1

Dropbox: syncNowAndWait в AsyncTask - Программирование Android

03.02.2016, 12:18. Просмотров 184. Ответов 10
Метки нет (Все метки)

В doInBackground() выгружаю данные на Dropbox, отображая ProgressDialog.
По кнопке Cancel (в диалоге) срабатывает событие onCancelled().
Но если я при выгрузке на Dropbox применяю syncNowAndWait(), чтобы дождаться синхронизации, то нажатие Cancel в момент синхронизирования не приводит ни к вызову onPostExecute() ни к вызову onCancelled().
Почему так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2016, 12:18     Dropbox: syncNowAndWait в AsyncTask
Посмотрите здесь:

Dropbox. Странности с подключением - Программирование Android
В "App Console" создал Application. В Android-проекте выставил "App key" и "App secret", запустил и подключился к Dropbox. Создаю...

Миграция на Dropbox API v2 - Программирование Android
С 28.06.2017 Dropbox API v1 больше не будет работать. В консоли разработчика есть инструкция по миграцию на API v2 . Я не могу понять,...

Отмена AsyncTask - Программирование Android
Привет. Есть такой код: @Override protected Void doInBackground(Void... params) { try { Interpret(Source.get()); }...

AsyncTask+CheckBox - Программирование Android
Здравствуйте, интересует вопрос нужно в функцию AsyncTask послать несколько строк, в зависимости какие Чекбоксы чекнуты. Ну например: ...

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

Работа с AsyncTask - Программирование Android
Попробовал использовать AsyncTask и возник вопрос. У меня есть несколько ф-й, которые парсят текстовые файлы и заполняют таблицы БД. ...

Работа с потоками (AsyncTask) - Программирование Android
Здравствуйте. Мне нужно отослать post запрос на сервер, но так как грузить GUI нельзя (что и логично) - обволакиваю весь код работы с...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
03.02.2016, 12:24     Dropbox: syncNowAndWait в AsyncTask #2
В AsyncTask криво сделан сancel, но гайды найти можно (может и на форуме есть), в свое время я тоже сталкивался с этим.
Pablito
2421 / 1866 / 583
Регистрация: 12.05.2014
Сообщений: 6,606
Завершенные тесты: 1
03.02.2016, 12:30     Dropbox: syncNowAndWait в AsyncTask #3
все там нормально сделано, просто задачу прервать в джаве невозможно
поэтому в postExecute, перед тем как что-то делать, надо проверять была ли задача cancel или нет
if (isCanceled()) бла бла
кроме этого есть еще метод onCanceled который в доках рекомендуется переопределять и выносить туда код
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 422
03.02.2016, 13:41  [ТС]     Dropbox: syncNowAndWait в AsyncTask #4
Цитата Сообщение от Паблито Посмотреть сообщение
поэтому в postExecute, перед тем как что-то делать, надо проверять была ли задача cancel или нет
if (isCanceled()) бла бла
В том то и дело, что в этом случае ни onPostExecute() ни onCancelled() не вызываются

Добавлено через 48 минут
Я так подозреваю, что несмотря на вызов
Java
1
my_task.cancel(true);
Процесс продолжает выполняться.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
03.02.2016, 14:13     Dropbox: syncNowAndWait в AsyncTask #5
Я не стал заморачиваться.
В doInBackground
Java
1
if (isCancelled()) return null;
В onPostExecute
Java
1
if (result != null) бла бла
Pablito
2421 / 1866 / 583
Регистрация: 12.05.2014
Сообщений: 6,606
Завершенные тесты: 1
03.02.2016, 14:23     Dropbox: syncNowAndWait в AsyncTask #6
Цитата Сообщение от Slon747 Посмотреть сообщение
Я так подозреваю, что несмотря на вызов
my_task.cancel(true);
Процесс продолжает выполняться.
именно, я об этом и говорю
Цитата Сообщение от Rube Посмотреть сообщение
Я не стал заморачиваться.
и об этом ) я так тоже делал
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 422
03.02.2016, 14:56  [ТС]     Dropbox: syncNowAndWait в AsyncTask #7
Цитата Сообщение от Rube Посмотреть сообщение
Я не стал заморачиваться.
В doInBackground
if (isCancelled()) return null;
В onPostExecute
if (result != null) бла бла
У меня везде понатыкано:
Java
1
2
if (isCancelled())
  return null;
Но при нажатии Cancel только диалог исчезает, а процесс продолжает висеть на syncNowAndWait()
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,724
03.02.2016, 16:15     Dropbox: syncNowAndWait в AsyncTask #8
Slon747, товарищ. Вы пробовали читать про syncNowAndWait? Это не обычный процесс, насколько я понимаю.
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 422
03.02.2016, 16:22  [ТС]     Dropbox: syncNowAndWait в AsyncTask #9
Цитата Сообщение от CoolMind Посмотреть сообщение
Slon747, товарищ. Вы пробовали читать про syncNowAndWait? Это не обычный процесс, насколько я понимаю.
Читал. Может и не обычный процесс. Но что посоветуете?
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,724
03.02.2016, 16:40     Dropbox: syncNowAndWait в AsyncTask #10
Slon747, заглянул в https://www.dropbox.com/developers-v1/sync/docs/android, там как-то всё мутно. Вообще, вы правы, странно, что AsyncTask не завершается.
Думаю, следует добавить обратные вызовы и, может быть, вообще убрать syncNowAndWait из AsyncTask (или поместить во Thread). Обратный вызов такой, наверное:
Java
1
void addSyncStatusListener(SyncStatusListener l)
или такой:
Java
1
void addPathListener(PathListener l, DbxPath path, Mode mode)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2016, 16:50     Dropbox: syncNowAndWait в AsyncTask
Еще ссылки по теме:

Свой listview с AsyncTask - Программирование Android
Подскажите, что не так делаю. При запуске приложения listview просто не отображается. Переменные все прошелся дебагером, значения...

Отмена AsyncTask из FragmentDialog - Программирование Android
Здравствуйте, у меня задача отменить выполнение AsyncTask`a из диалога, который создается в этом таске. new AsyncTask<Void, Void, Void>()...

Абстрактное наследование от AsyncTask - Программирование Android
Нужно реализовать иерархию наследования от AsyncTask. Цель - переопределить метод. Как в Java реализуется шаблонное наследование ? ...

FATAL EXCEPTION: AsyncTask #3 - Программирование Android
Не могу понять в чем проблема гуглил ничего не смог найти (я новичек уж извините)). 01-21 12:29:10.019:...

ArrayList не заполняется в AsyncTask - Программирование Android
Здравствуйте. В asyncTask есть такой код: String s = elements.get(0).text().split(": "); Log.d("1",s); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Pablito
2421 / 1866 / 583
Регистрация: 12.05.2014
Сообщений: 6,606
Завершенные тесты: 1
03.02.2016, 16:50     Dropbox: syncNowAndWait в AsyncTask #11
есть такое, я не умею хорошо доносить мысль, поэтому дубль два

В джаве нельзя вот просто так взять и убить Thread, можно только вызвать cancel();
Если в этом асинктаске был бы бесконечный цикл - никаких проблем, в цикле проверяем isCanceled() и все.
Но если там стартует другая асинхронная задача, например http connect или как в данном случае синхронизация то все немного по-другому.

Не получится просто взять и убить это все. Поэтому вызываем cancell() и забиваем на этот асинктаск.
Когда он отработает, проверяем isCancelled() и если задача была "канцельнута" то не делаем ничего. Иначе пытаемся передать данные куда требуется.

Мне лениво читать API дропбокса, я как-то раз делал чтение-запись файлов оттуда-туда и уже не помню всего.
Там может где-то можно просто указать таймаут для этой синхронизации. Все равно когда то этот методо тработает или вернет исключение и тогда асинктаск проснется и заработает дальше - onPostExecute и все такое. Где его и будет ждать проверка о которой я написал выше.
Yandex
Объявления
03.02.2016, 16:50     Dropbox: syncNowAndWait в AsyncTask
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru