我正在玩SQLite和SQL服务器数据库来互相同步。我在单独的方法中附上单独的表更新。它可以从主线程成功执行,但需要很长时间。我如何将这些方法包含在asynctask中?android:用于后台操作的AsyncTask
说我有4种方法,其中服务器和SQLite之间同步数据,我的四个表....当我运行主UI线程下所有这些方法都需要时间来完成这些操作。所以我的问题是如何将这些方法导入doInBacckground的异步任务。
我正在玩SQLite和SQL服务器数据库来互相同步。我在单独的方法中附上单独的表更新。它可以从主线程成功执行,但需要很长时间。我如何将这些方法包含在asynctask中?android:用于后台操作的AsyncTask
说我有4种方法,其中服务器和SQLite之间同步数据,我的四个表....当我运行主UI线程下所有这些方法都需要时间来完成这些操作。所以我的问题是如何将这些方法导入doInBacckground的异步任务。
这真的是一个非常非常糟糕的主意,用长时间运行的操作AsyncTasks。尽管如此,对于短暂的生活,例如在1或2秒后更新视图,它们都很好。
AsyncTasks
不按照活动实例的生命周期。如果在“活动”中启动AsyncTask
,并且旋转设备,则Activity
将被销毁并创建一个新实例。但AsyncTask
不会死。这是建议避免长期运行任务的AsyncTask
的原因之一。
但是,如果你的活动过程中,继续暂停,这很可能会崩溃,所以你应该使用task.cancel(true);
如果你需要你的任务是生存的活动取消任务onPause()
,那么你应该使用一个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);
以下是有关意图服务的一些链接:
希望这会对你有所帮助。
发布你的代码怎么样? –
我不能发布我的代码,因为一些问题.... –
无代码不能给出更好的解决方案 –