2016-05-12 38 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

希望這會對你有所幫助。