我正在使用SQLite和SQL服务器数据库来相互同步。我在单独的方法中附上了单独的表更新。它可以从主线程成功执行,但需要很长时间。我如何将这些方法包含在asynctask中?
说我有4个方法,我的四个表同步服务器和sqlite之间的数据....当我在主UI线程下运行所有这些方法时,需要时间来完成这些操作。所以我的问题是如何将这些方法导入异步任务的doInBacckground。
答案 0 :(得分:1)
将AsyncTasks用于长时间运行操作真的是一个非常糟糕的主意。然而,它们适用于短期生活,例如在1或2秒后更新视图。
AsyncTasks
不要关注活动实例'生命周期。如果您在活动中启动AsyncTask
并旋转设备,则会销毁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 Service的一些链接: