1

最適な設計を見つけようとしているトリッキーなユースケースがあります。説明は次のとおりです。

  • FolderListActivityダウンロード可能なフォルダのリストを示す対応するビュー があるはずです
    • ユーザーはアイテムを長押しして、ダウンロード キューに追加できます
  • と呼ばれる別のアクティビティDownloadingQueueActivityが利用可能である必要があります。
    • 進行状況バー (ダウンロードされたファイル / 合計ファイル) を使用して、キューにあるアイテムのリストを表示します
    • 再配置可能です(ユーザーはキューのアイテムの順序を変更できる必要があります)
    • アイテムを削除できます(またはキュー全体も)
    • ダウンロードを一時停止できます

また、アプリケーションを終了した後もダウンロードを継続する必要があるため、サービスで処理する必要があります。そのため、サービスは次のことができる必要があります。

  • キューからフォルダー内のファイルをダウンロードする
  • DownloadingQueueActivity進行状況を通知する
  • キューの変更をリッスンする (原因: DownloadingQueueActivity)

でこれを実行しようとMessengerしましたが、多くの異なる種類のメッセージが表示され、エレガントな解決策とは言えません。

これを実装するためのアドバイスやヒントは大歓迎です。

4

1 に答える 1

1

あなたは正しい軌道に乗っているようです。すべてのダウンロードを処理している DownloadService があります。このServiceにバインドDownloadingQueueActivityできます。バインドすると、アクティビティを更新するために必要なすべての情報を取得できます。

プッシュ通知に関しては、リスナーを使用できます。そのため、Activiy を実装するための新しいインターフェイスを作成します。

public static interface DownloadListener {

    void updateViews(int progress);
}

次に、この関数をアクティビティに追加します。

public class DownloadingQueueActivity {

    public void updateViews(int progress) {

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                //update views
            }
        });
    }
}

次に、バインド後にリスナーをサービスに追加します。

private ServiceConnection listenerStarter = new ServiceConnection() {

    public void onServiceConnected(ComponentName name, IBinder service) {

        DownloadService ds = ((DownloadService.LocalBinder) service).getService();
        ds.addListener(DownloadingQueueActivity.this);

    }

    public void onServiceDisconnected(ComponentName className) {
    }

};

次に、DownloadService で、ビューを更新するときに、サービスに設定されているリスナーにメッセージを送信するだけです (サービスに addListener 関数を作成し、onStop() でリスナーを削除することも忘れないでください)。アクティビティの):

listener.updateViews(30);
于 2013-02-19T01:35:58.897 に答える