我正在玩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);
以下是有關意圖服務的一些鏈接:
希望這會對你有所幫助。
發佈你的代碼怎麼樣? –
我不能發佈我的代碼,因爲一些問題.... –
無代碼不能給出更好的解決方案 –