長時間実行する操作に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);
はテントサービスについてのいくつかのリンクです:
- http://javatechig.com/android/creating-a-background-service-in-android
- http://www.101apps.co.za/articles/using-an-intentservice-to-do-background-work.html
- http://www.mysamplecode.com/2011/10/android-intentservice-example-using.html
希望すると、これが役に立ちます。
コードを投稿するのはどうですか? –
いくつかの問題のために私のコードを掲載することができません.... –
コードなしでより良い解決策を与える –