検索

ホームページ  >  に質問  >  本文

android - Activity重建时如何重新获取文件下载进度

做了一个下载文件的列表,用RecyclerView展示。点击下载某个文件,交由单独的下载类去处理(单例),下载类计算下载进度返回给UI进行更新。但是当用户点击返回按钮返回上一级的时候,下载线程没有停止,activity被销毁。重新进入此Activity的时候,RecylerView里的对象是通过网络新获取的,怎么设计才能让此时RecyclerView里的对象和下载类里的对象对应起来呢?否则无法实时更新进度及状态。

天蓬老师天蓬老师2771日前418

全員に返信(3)返信します

  • ringa_lee

    ringa_lee2017-04-18 09:55:27

    この種のロジック処理にオブジェクトの破棄と再構築が含まれる場合は、オブジェクト参照をマッピングするのではなく、データ値をマッピングする必要があります。ネットワーク処理を Activity または RecyclerView に直接配置しないでください。ダウンロードの場合は、ダウンロード スレッドを管理するバックグラウンド サービスを開始し、そのサービスがアクティビティと通信できるようにするのが最善です。この方法では、オブジェクトが対応できるかどうかを気にする必要はありません。サービスによって報告されるダウンロードの進行状況の値。 Service と Activity の間の相互作用については、インターネット上にあまりにも多くのチュートリアルとホイールがあるため、詳細については説明しません。

    返事
    0
  • 高洛峰

    高洛峰2017-04-18 09:55:27

    システム独自の DownloadManager であっても、カスタム ダウンロード コンポーネントであっても、ファイルのダウンロードにはダウンロード ID が含まれるか、Uri に対応することになります。システムには自動的に DownloadManager が渡されることに注意してください。ダウンロード情報を保持します。

    1. この前提では、各ファイルのダウンロードの進行状況を取得する方法を見つける必要があります。これは、DownloadManager の特定の実装に関連しています。 Query インターフェイスのみを提供しているようです。そのため、ダウンロードの進行状況をリアルタイムでクエリするためのバックグラウンド スレッドを作成する必要があります。

    2. 最後に、ID または Uri と RecyclerViewItemView との対応をどのように管理するかを考える必要があります。

    上記の 1 と 2 は、いくつかの主流の画像非同期読み込みフレームワーク (github: nostra13/Android-Universal-Image-Loader など) を参照して実装できます。

    追伸、複雑すぎると思われる場合は、github: erehmi/CountDownTask を参照してください (恥知らずにも自分のプロジェクト [顔カバー] をお勧めします)

    p.p.s. リスト全体を更新するために直接 notificationDataChanged() を実行することはお勧めできません。パフォーマンスが低すぎるためです。

    返事
    0
  • ringa_lee

    ringa_lee2017-04-18 09:55:27

    このタイプのダウンロード タスクにはサービスを使用するのが最適です

    返事
    0
  • キャンセル返事