2016-05-12 51 views
0

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

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

+1

发布你的代码怎么样? –

+0

我不能发布我的代码,因为一些问题.... –

+0

无代码不能给出更好的解决方案 –

回答

1

这真的是一个非常非常糟糕的主意,用长时间运行的操作AsyncTasks。尽管如此,对于短暂的生活,例如在1或2秒后更新视图,它们都很好。

AsyncTasks不按照活动实例的生命周期。如果在“活动”中启动AsyncTask,并且旋转设备,则Activity将被销毁并创建一个新实例。但AsyncTask不会死。这是建议避免长期运行任务的AsyncTask的原因之一。

但是,如果你的活动过程中,继续暂停,这很可能会崩溃,所以你应该使用task.cancel(true);

如果你需要你的任务是生存的活动取消任务onPause(),那么你应该使用一个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); 

以下是有关意图服务的一些链接:

  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

希望这会对你有所帮助。