1

Serviceサーバーからのファイルのダウンロードを容易にする があります。Intentで を受信するたびonStartCommandに、新しい を開始し、ダウンロード中の URL をキーとして をマップThreadに配置Threadし、ダウンロードの進行状況を示す通知を作成します。マップに がない場合、が作成または更新されているときに使用する必要があることを示すThreadフラグが に設定されます。後続の s/ s は、オフとオンを使用して表示されます。それぞれに、またはに送信される固有の ID があります。ファイルのダウンロードが終了したとき、またはユーザーがダウンロードをキャンセルしたとき(ThreadstartForegroundNotificationThreadNotificationNotificationManager.notifyFLAG_AUTO_CANCELFLAG_ONGOING_EVENTThreadstartForegroundnotifyNotificationRemoteViewが「フォアグラウンド スレッド/通知」である場合、stopForeground(true)が呼び出され、ダウンロードが完了したかどうかを示すNotification新しい が読み込まれ、次の実行では「フォアグラウンド」フラグが に設定されます。RemoteViewThreadtrue

問題は、たとえば、2 つのファイルをダウンロードしている場合、1 つはNotification/Threadに接続され、もう 1 つは接続されてstartForegroundいないことです。「前景」のものをキャンセルすれば、すべて問題ありません。ただし、非フォアグラウンドのキャンセル ボタンを押すと、フォアグラウンドのボタンが閉じられます (キャンセル ボタンをもう一度押すと、適切なボタンが閉じられます)。キャンセルせずに 3 番目のダウンロードを開始すると、他のダウンロードよりも先に完了したNotificationことが示されますが、まだ進行中の他の 2 つのダウンロードが点滅し始め、ステータス バーですばやく上下に移動します。

Service上記の状況で通知が飛び交うことなく、キャンセルが適切に機能している状態で、ダウンロードが行われている限り、 が常にフォアグラウンドにあることを確認するにはどうすればよいですか?

4

1 に答える 1

2

私がやったのは、すべての s に対してグローバルである、Service呼び出された変数を作成することでした。が呼び出されたかどうかを示し、その後に が呼び出されていないことを示します。isInForegroundThreadstartForegroundstopForeground

私のupdateNotification方法では、チェックしisInForegroundます。falseI がに設定されている場合は、のフラグをtrueに設定し、それを使用して呼び出します。私の方法では、 がの場合、 を に設定してを呼び出します。ThreadisForegroundNotificationtruestartForegroundThreadNotificationstopNotificationThreadisForegroundNotificationtrueisInForegroundfalsestopForeground(true)

于 2012-10-18T20:10:03.277 に答える