基本的に Android では、Web サービスからデータをアップロード/ダウンロードしようとしており、進行状況のパーセンテージを示す進行状況バーをレンダリングする必要があります。
以下は、それらを検討する理由とともに私が実装したアプローチです。
- バックグラウンド
IntentService
で実行することを選択しました:リンクに よると、バインドされたアクティビティ/フラグメントが破棄されると破棄されるため、バインドされたサービスを使用できませんでした。したがって、IntentService
以上の選択Service
。移動は1回で、インテントサービスはワーカースレッドで機能するため、はるかに優れています。 - 更新を受信するブロードキャスト:上記
LocalBroadcastManager
から受信したブロードキャストをリッスンするように登録して、プログレス バー UI を更新する 実装。IntentService
ただし、このアプローチでは、次の問題に対処する必要があります。
ブロードキャストの順序は維持されません。ブロードキャストには、アップロード/ダウンロードの進行状況のパーセンテージが含まれます。しかし、順序が維持されていないため、古い更新を受信する可能性があります (例: 40% の後に 30% を受信する場合があります)。sendBroadcastSync
の方法も試してみましたLocalBroadcastManager
が、一貫して機能しません(これについてはよくわかりません)。したがって、私はMessenger
経由で実装しようとしHandler
ましたが、UI が再作成されると (Activitiy/Fragment が破棄されて作成されます)、進行中のアップロード/ダウンロードに再接続できないことがわかりました。基本的に、への参照Handler
は前のアクティビティ/フラグメントとともに失われるため、メッセージは更新のために UI に配信されません。
私はしばらくの間、自分の道を歩もうとしてきましたが、それを成し遂げることができません。あなたの知恵の言葉はとても役に立ちます。