android - Activity重建时如何重新获取文件下载进度
天蓬老师
天蓬老师 2017-04-18 09:53:27
0
3
414

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

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

répondre à tous(3)
左手右手慢动作

Lorsque ce type de traitement logique implique la destruction et la reconstruction d'objets, il convient de prêter attention au découplage. Les références d'objet ne doivent pas être mappées, mais les valeurs des données doivent être mappées. Ne placez pas le traitement réseau directement dans Activity ou RecylerView. Pour le téléchargement, il est préférable de démarrer un service en arrière-plan pour gérer votre fil de téléchargement, puis de laisser le service communiquer avec l'activité. De cette façon, vous n'avez pas à vous soucier de savoir si votre objet peut correspondre. sur la progression du téléchargement signalée par le service. Quant à l'interaction entre Service et Activité, il y a trop de tutoriels et de roues sur Internet, je n'entrerai donc pas dans les détails.

小葫芦

Qu'il s'agisse du propre DownloadManager du système ou d'un composant de téléchargement personnalisé, un fichier téléchargé aura un identifiant de téléchargement, ou correspondra à un Uri. Il est à noter que le système DownloadManager est automatiquement transmis à la base de données. pour conserver les informations de téléchargement.

  1. Avec cette prémisse, cela ne suffit toujours pas. Vous devez trouver un moyen d'obtenir la progression du téléchargement de chaque fichier. Ceci est lié à la mise en œuvre spécifique de DownloadManager. il semble qu'il ne fournisse que l'interface de requête. Par conséquent, nous devons créer un fil d'arrière-plan pour interroger la progression du téléchargement en temps réel.

  2. Enfin, nous devons réfléchir à la manière de gérer la correspondance entre l'ID ou l'Uri et le RecyclerView de ItemView.

Les points 1 et 2 ci-dessus peuvent être implémentés en faisant référence à certains frameworks de chargement asynchrone d'images grand public (tels que github : nostra13/Android-Universal-Image-Loader

).

p.s. Si vous pensez que c'est trop compliqué, vous pouvez vous référer à github : erehmi/CountDownTask (je recommande sans vergogne mon propre projet [face cover])

.

p.p.s. Il n'est pas recommandé de notifyDataChanged() directement pour actualiser toute la liste, les performances sont trop faibles.

左手右手慢动作

Il est préférable d'utiliser le service pour ce type de tâche de téléchargement

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal