android:用于后台操作的AsyncTask

时间:2016-05-12 09:31:52

标签: android android-asynctask

我正在使用SQLite和SQL服务器数据库来相互同步。我在单独的方法中附上了单独的表更新。它可以从主线程成功执行,但需要很长时间。我如何将这些方法包含在asynctask中?

说我有4个方法,我的四个表同步服务器和sqlite之间的数据....当我在主UI线程下运行所有​​这些方法时,需要时间来完成这些操作。所以我的问题是如何将这些方法导入异步任务的doInBacckground。

1 个答案:

答案 0 :(得分:1)

将AsyncTasks用于长时间运行操作真的是一个非常糟糕的主意。然而,它们适用于短期生活,例如在1或2秒后更新视图。

AsyncTasks不要关注活动实例'生命周期。如果您在活动中启动AsyncTask并旋转设备,则会销毁Activity并创建新实例。但AsyncTask不会死。这是建议避免长期运行AsyncTask任务的原因之一。

但是,如果您的活动在此过程中暂停,则可能会崩溃,因此您应该使用onPause()

取消task.cancel(true);中的任务

如果您的任务需要在活动中生存,那么您应该使用ServiceServiceIntent。前者有点复杂,因为你必须管理它的生命周期,但提供更多的灵活性。第二个是该死的直截了当所以我可以举个例子:

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 Service的一些链接:

  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
  4. 希望这会对你有所帮助。