-1

S3 マルチパート API を使用してネットワークにファイルをアップロードします。アップロードは IntentService で行われます。現在、API は再開サポートをサポートしており、ユーザーがアップロードを一時停止および再開できるようにしたいと考えています。問題は、ユーザーが一時停止ボタンを押すことを許可するときです。どうすればインテント サービスを強制終了できますか? このため、現在実行中の IntentService を取得し、アップロード中のオブジェクトの状態を保存して一時停止または強制終了する関数を呼び出す必要があります。現在実行中のインテント サービスにメッセージを送信して強制終了する方法はありますか?

敬具

4

1 に答える 1

1

メソッドが終了すると、 an はIntentService停止します。onHandleIntent()これは、通常のサービスに対する利点の 1 つです。ライフサイクルを管理する必要はありません。

Android ドキュメント ページからIntentService.onHandleIntent()

このメソッドは、処理要求を使用してワーカー スレッドで呼び出されます。一度に処理されるインテントは 1 つだけですが、処理は他のアプリケーション ロジックから独立して実行されるワーカー スレッドで行われます。そのため、このコードに時間がかかる場合、同じ IntentService への他のリクエストは保留されますが、それ以外は保留されません。すべてのリクエストが処理されると、IntentService 自体が停止するため、stopSelf() を呼び出さないでください。

アップロードの一時停止/再開に関しては、ノンブロッキング IO を使用する必要があります。IO のブロックを中断したり停止したりする方法はありません。あなたができる最善のことは、終了時に結果を破棄するように自分自身に指示する状態を設定することです。ノンブロッキング IO は少し複雑で、ここで説明できる範囲を超えています。これは、このトピックに関する合理的なチュートリアルの 1 つです。高レベルの API (AWS Android API など) を使用して S3 と対話する場合、その API はノンブロッキング IO をサポートする必要があります。

あなたの場合、アップロードごとにデータベースの状態を維持できます。インテント サービスで結果を取得したら、DB にクエリを実行して、ユーザーがアップロードをキャンセルしたかどうかを確認できます。

一時停止/再開をサポートしてファイルをダウンロードする堅牢な方法を探している場合は、DownloadManagerAPI を見ましたか?

于 2012-08-30T15:13:51.680 に答える