2016-05-12 5 views
0

私はお互いに同期するためにSQLiteとSQLサーバーデータベースを使って遊んでいます。私は別の方法で別のテーブルの更新を囲んだ。メインスレッドから正常に実行できますが、時間がかかります。どうすればそれらのメソッドをasynctaskで囲むことができますか?アンドロイド:バックグラウンド操作のためのAsyncTask

私はサーバーとsqlite間のデータを同期する4つのテーブルの4つのメソッドを持っています。これらのメソッドをすべてメインUIスレッドで実行していると、それらの操作を完了するのに時間がかかります。だから私の質問は、非同期タスクのdoInBacckgroundにこれらのメソッドをインポートする方法です。

+1

コードを投稿するのはどうですか? –

+0

いくつかの問題のために私のコードを掲載することができません.... –

+0

コードなしでより良い解決策を与える –

答えて

1

長時間実行する操作にAsyncTasksを使用することは、実際非常に悪い考えです。それにもかかわらず、1〜2秒後にViewを更新するなど、短い生存者にとっては問題ありません。

AsyncTasksアクティビティインスタンスのライフサイクルに従いません。アクティビティ内でAsyncTaskを起動し、デバイスをローテーションすると、Activityが破棄され、新しいインスタンスが作成されます。しかし、AsyncTaskは死ぬことはありません。長時間実行されるタスクの場合は、AsyncTaskを避けることをお勧めします。あなたの活動は、プロセス中に一時停止になった場合

しかし、これがクラッシュする可能性があるので、あなたはtask.cancel(true);

を使用してonPause()であなたのタスクをキャンセルする必要があり、あなたがあなたの活動を生き残るために、あなたのタスクを必要とする場合は、Aのいずれかを使用する必要があります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); 

はテントサービスについてのいくつかのリンクです:

  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

希望すると、これが役に立ちます。

関連する問題