2017-02-04 12 views
0

を閉じたときにAsyncTaskを維持する方法:ユーザーが私の主な活動にはこれがあるアプリ

@Override 
public void onBackPressed() { 

    super.onBackPressed(); 
    finish(); 
    moveTaskToBack(true); 
    System.exit(0); 
} 

私は、ユーザーがアプリを閉じた後AsyncTaskをバックグラウンドで私のサーバーに入れたデータを続けていきたいです。

+0

サービスに精通している必要があります。 –

+0

重複 - http://stackoverflow.com/questions/39507506/how-to-execute-background-task-when-android-app-is-closed-set-to-backgroundそして、http://stackoverflow.com/questions/39507506/how-to-execute-background-task-when-android-app-is-closed-set-to-background –

+0

サービスでそれに慣れてください。 –

答えて

2

ユーザーがアプリケーションを閉じた後に、AsyncTaskでバックグラウンドでサーバーにデータを保存します。

AsyncTaskの目的はActivityのライフサイクルの範囲を超えてありますバックグラウンドタスクを実行するためにではありません。バックグラウンドスレッドがスレッドプールから割り当てられると、タスクが終了するとバックグラウンドスレッドがそれを返すことが期待されます。つまり、必要な時間が不定のAsyncTaskは使用できません。

あなたはをお探しですか?は、Servicesです。

私たちにサービスがある場合は、なぜAsyncTaskを使用するのですか?

まあ、たとえばあなたがButtonのクリックでActivityからの画像/曲をダウンロードするために必要とするか、またはあなたがその実行を完了するためにいくつかの時間がかかるタスクを実行する必要があると言います。メインスレッド(別名UIスレッド)からこれらのタスクを実行することは悪いアプローチであり、アプリケーションが遅くなり、最終的にはANRになる可能性があります。したがって、これらのタスクは別のスレッドから非同期に処理され、アプリのバタフライをスムーズに保ちます。

+0

私はこれまでサービスについて聞いたことがありません。間違いなくそれをチェックします。 – grant

+0

それはコミュニティの一員であることの最も良い部分です。あなたは新しいことを学び、新しいことを共有します:) – OBX

+0

サービスを持っている場合はなぜAsyncTaskを使用しますか? – grant

1

サービスは、ソリューションの一部であるサービスまたは/およびIntentServicesをチェックする必要がありますが、サービスがフォアグラウンドスレッド上で実行されることに注意してください。 AsyncTaskをサービスから実行して、バックグラウンドスレッドでの実行を継続したい場合があります。

個人的に、私はJobSchedulerの賛成でサービスを利用してに対するをお勧めしたり、API 21以下のデバイスをサポートする必要がある場合は、EvernoteののJobManager(も少し簡単であるが使用します)。これらは、バッテリの使用を最小限に抑えるため、またはデバイスがアイドル状態のときに、適切なタイミングでバックグラウンド操作をスケジュールするのに役立ちます。デバイスのリソースを使用するときは、良い市民であることが重要です。

+0

'System.exit(0);'はサービスを終了しますか? – grant

+0

@grant System.exit(0)はサービスを停止します。それは本質的にアプリのプロセスをクラッシュさせます。ただし、作成したサービスの種類によっては、サービスが再開される可能性があります。サービスがスティッキーサービス(https://developer.android.com/reference/android/app/Service.html#START_STICKY)として知られている場合、OSはサービスを再開しますが、もちろんプロセスが再開されます。 – dhaag23

関連する問題