1
  1. fileuploaderサービスを実装するクラスがあります。アクティビティはそれにバインドし、アップロードするファイルのリストを提供し、すぐにバインドを解除します。次に、ファイルはバックグラウンドスレッド(asynctask)のサービスによって1つずつアップロードされます。

  2. startService()を使用してダッシュボードアクティビティでこのサービスを開始し、具体的にstopService()が呼び出されるまで実行を継続します。

  3. さて、私の質問は、いつこのサービスを停止するのですか?

基本的に、2つの条件を確認する必要があります。1:すべてのファイルがアップロードされている。2:アプリが終了しました。また、アプリを終了するには、ユーザーはダッシュボードアクティビティの戻るボタンを押す必要があります。

戻るボタンの押下をオーバーライドして、ファイルが残っているかどうかをサービスに問い合わせることもできましたが、その方法は使用したくありません。

助言がありますか?

4

1 に答える 1

1

アクティビティはそれにバインドし、アップロードするファイルのリストを提供し、すぐにバインドを解除します。

startService()ではなく、を使用することをお勧めしbindService()ます。

次に、ファイルはバックグラウンドスレッド(asynctask)のサービスによって1つずつアップロードされます。

startService()これは、IntentService(またはWakefulIntentServiceアップロード中にデバイスがスリープ状態になることが心配な場合は)に適しているようです。

startService()を使用して、ダッシュボードアクティビティでこのサービスを開始します

startService()作品の発送に使用した場合、これは必要ありません。

特にstopService()が呼び出されるまで実行を継続します。

理想的には、サービスは、そうであるように、それ自体をシャットダウンIntentServiceします。結局のところ、サービスがいつ行われるかを知っているのはサービスだけです。

私の質問は、いつこのサービスを停止するのですか?

やるべきことがもうないとき。IntentServiceこれは自動的に行われます。本当に作業を行うために独自のスレッドプールを維持したい場合は、作業キューが空になり、すべてのスレッドが完了したらstopSelf()、サービス内から呼び出します。

基本的に私は2つの条件をチェックする必要があります:1:すべてのファイルがアップロードされます

はい。

2:アプリが終了しました

いいえ。UIは、サービスが実行されているかどうかを気にする必要はありません。サービスはそれ自体を処理する必要があります。

また、アプリを終了するには、ユーザーはダッシュボードアクティビティの戻るボタンを押す必要があります。

ユーザーはアプリを離れることができますが、戻る、ホーム、最近、Notification電話の着信などがあります。

助言がありますか?

を使用しIntentServiceます。への呼び出しを介してアップロードするジョブを送信し、必要なすべてのデータを使用済みstartService()データにパッケージ化します(例:エクストラ)。でアップロード作業を行います。必要に応じて、アプリ内のアクティビティにアップロードステータスを通知するために使用します。これにより、アクティビティは、必要に応じて、アップロードステータスをUIに反映できます。ワークキューが空になったときに自分自身を停止することを処理します。IntentstartService()onHandleIntent()LocalBroadcastManagerIntentService

于 2012-12-29T14:47:36.077 に答える