2016-05-12 3 views
0

Я играю с базами данных SQLite и SQL для синхронизации друг с другом. Я включил отдельную таблицу обновления в отдельных методах. он может успешно выполняться из основного потока, но требуется много времени. как я могу заключить эти методы в asynctask?android: AsyncTask для фоновых операций

Скажем, у меня есть 4 метода для четырех таблиц, которые синхронизируют данные между сервером и sqlite .... Когда я запускаю все эти методы в основном потоке пользовательского интерфейса, для завершения этих операций требуется время. Поэтому мой вопрос: как импортировать эти методы в doInBacckground задачи async.

+1

Что относительно размещения кода? –

+0

Я не могу опубликовать свой код из-за некоторых проблем .... –

+0

без кода не может дать лучшее решение –

ответ

1

Это очень плохая идея использовать AsyncTasks для длительных операций. Тем не менее, они подходят для коротких живых, таких как обновление вида через 1 или 2 секунды.

AsyncTasks не следует. Если вы запустите AsyncTask внутри Activity и вы повернете его, то Activity будет уничтожен и будет создан новый экземпляр. Но AsyncTask не умрет. Это одна из причин, по которой рекомендуется избегать AsyncTask для выполнения длительных задач.

Однако, если ваша активность идет на паузе в процессе, это, вероятно, к краху, так что вы должны отменить задание в onPause() с помощью task.cancel(true);

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

public class MyIntentService extends IntentService{ 

public MyIntentService() { 
    super("MyIntentService"); 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
    // Background work in a worker thread (async) 

    // You could also send a broadcast if you need to get notified 
    Intent broadcastIntent = new Intent(); 
    broadcastIntent.setAction("whatever"); 
    LocalBroadcastManager.getInstance(this).sendBroadcast(broadcastIntent); 
} 
} 

вы можете начать, если от вашей деятельности с помощью этой команды:

Intent i = new Intent(context, MyIntentService.class); 
context.startService(i); 

Вот некоторые ссылки о Intent службы:

  1. http://javatechig.com/android/creating-a-background-service-in-android
  2. http://www.101apps.co.za/articles/using-an-intentservice-to-do-background-work.html
  3. http://www.mysamplecode.com/2011/10/android-intentservice-example-using.html

Надеюсь, это вам поможет.

Смежные вопросы