Service
サーバーからのファイルのダウンロードを容易にする があります。Intent
で を受信するたびonStartCommand
に、新しい を開始し、ダウンロード中の URL をキーとして をマップThread
に配置Thread
し、ダウンロードの進行状況を示す通知を作成します。マップに がない場合、が作成または更新されているときに使用する必要があることを示すThread
フラグが に設定されます。後続の s/ s は、オフとオンを使用して表示されます。それぞれに、またはに送信される固有の ID があります。ファイルのダウンロードが終了したとき、またはユーザーがダウンロードをキャンセルしたとき(Thread
startForeground
Notification
Thread
Notification
NotificationManager.notify
FLAG_AUTO_CANCEL
FLAG_ONGOING_EVENT
Thread
startForeground
notify
Notification
RemoteView
が「フォアグラウンド スレッド/通知」である場合、stopForeground(true)
が呼び出され、ダウンロードが完了したかどうかを示すNotification
新しい が読み込まれ、次の実行では「フォアグラウンド」フラグが に設定されます。RemoteView
Thread
true
問題は、たとえば、2 つのファイルをダウンロードしている場合、1 つはNotification
/Thread
に接続され、もう 1 つは接続されてstartForeground
いないことです。「前景」のものをキャンセルすれば、すべて問題ありません。ただし、非フォアグラウンドのキャンセル ボタンを押すと、フォアグラウンドのボタンが閉じられます (キャンセル ボタンをもう一度押すと、適切なボタンが閉じられます)。キャンセルせずに 3 番目のダウンロードを開始すると、他のダウンロードよりも先に完了したNotification
ことが示されますが、まだ進行中の他の 2 つのダウンロードが点滅し始め、ステータス バーですばやく上下に移動します。
Service
上記の状況で通知が飛び交うことなく、キャンセルが適切に機能している状態で、ダウンロードが行われている限り、 が常にフォアグラウンドにあることを確認するにはどうすればよいですか?