Android долгое обновление активности - PullRequest
0 голосов
/ 07 сентября 2011

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

AsyncTask занимает довольно много времени, потому что я подключаюсь к серверу и извлекаю информацию из многих таблиц, вставляю их в базу данных sqlite и отправляю данные из локальной базы данных на сервер.

Мне интересно, не лучше ли воспользоваться услугой для этого? это? С другой стороны, у меня есть сомнения. Когда я нажимаю кнопку «Назад», я оставляю эту активность, но AsyncTask, кажется, работает сзади (потому что у меня есть тост, чтобы сообщить пользователю, что работа выполнена, и это отображается намного позже (даже если я оставил эту активность!).

Затем у меня есть другое действие, которое требует, чтобы данные читались и записывались в / из БД, поэтому, если я делаю это, пока другой поток (поток загрузки) тоже портит базу данных, возможно, что-то идет не так? ? Есть ли способ предотвратить это? заранее спасибо

Ответы [ 2 ]

0 голосов
/ 07 сентября 2011

Запуск вашей задачи в сервисе - это определенно хорошая идея для любой длительной операции, которая переживет вашу активность.

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

Также представление пользователя с пользовательским интерфейсом из действия, которое было и прошло, плохо для UX.

Лучше всего запустить AsyncTask в службе и отображать обновления статуса с помощью уведомления в строке состояния . Таким образом, пользователь может получить обновление прогресса, как и когда им нужно. Служба с уведомлением о состоянии считается запущенной, и система не будет убивать процесс (и, следовательно, ваш поток), если у вас действительно мало памяти.

Что касается вопроса одновременного доступа к базе данных, вам, вероятно, следует написать ContentProvider для управления доступом к вашей базе данных. ContentProviders должны быть потокобезопасен и обеспечит равномерный доступ к вашим данным в любой части вашего приложения и может даже использоваться другими приложениями, если вы хотите экспортировать свои данные.

0 голосов
/ 07 сентября 2011

Если вы беспокоитесь о том, что пользователь вносит изменения в данные во время выполнения синхронизации, то создание этого сервиса на самом деле вам не поможет. Что вы можете сделать, это уничтожить AsyncTask (изящно) в методе Activity onDestroy (), чтобы, если пользователь щелкнет стрелку назад, задание не продолжилось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...