アクティビティはそれにバインドし、アップロードするファイルのリストを提供し、すぐにバインドを解除します。
startService()
ではなく、を使用することをお勧めしbindService()
ます。
次に、ファイルはバックグラウンドスレッド(asynctask)のサービスによって1つずつアップロードされます。
startService()
これは、IntentService
(または、WakefulIntentService
アップロード中にデバイスがスリープ状態になることが心配な場合は)に適しているようです。
startService()を使用して、ダッシュボードアクティビティでこのサービスを開始します
startService()
作品の発送に使用した場合、これは必要ありません。
特にstopService()が呼び出されるまで実行を継続します。
理想的には、サービスは、そうであるように、それ自体をシャットダウンIntentService
します。結局のところ、サービスがいつ行われるかを知っているのはサービスだけです。
私の質問は、いつこのサービスを停止するのですか?
やるべきことがもうないとき。IntentService
これは自動的に行われます。本当に作業を行うために独自のスレッドプールを維持したい場合は、作業キューが空になり、すべてのスレッドが完了したらstopSelf()
、サービス内から呼び出します。
基本的に私は2つの条件をチェックする必要があります:1:すべてのファイルがアップロードされます
はい。
2:アプリが終了しました
いいえ。UIは、サービスが実行されているかどうかを気にする必要はありません。サービスはそれ自体を処理する必要があります。
また、アプリを終了するには、ユーザーはダッシュボードアクティビティの戻るボタンを押す必要があります。
ユーザーはアプリを離れることができますが、戻る、ホーム、最近、Notification
電話の着信などがあります。
助言がありますか?
を使用しIntentService
ます。への呼び出しを介してアップロードするジョブを送信し、必要なすべてのデータを使用済みstartService()
データにパッケージ化します(例:エクストラ)。でアップロード作業を行います。必要に応じて、アプリ内のアクティビティにアップロードステータスを通知するために使用します。これにより、アクティビティは、必要に応じて、アップロードステータスをUIに反映できます。ワークキューが空になったときに自分自身を停止することを処理します。Intent
startService()
onHandleIntent()
LocalBroadcastManager
IntentService