F-droid 源码片段(二)下载模块整理

本文聚焦F-droid的下载功能,通过改造实现了一个独立的下载demo,介绍如何利用接口回调和Handler确保线程安全。项目下载链接提供,文章指出尚待完善的断点下载及多页面监听优化,建议使用观察者模式解决。
摘要由CSDN通过智能技术生成

 这篇文章把F-droid的下载功能经过修改单独拿出来,而且做了一个demo。

希望能对自己后续起到借鉴作用。各位童鞋也可以去进行下载。

 

其实主要的思想有2个

 

1、使用接口进行回调

2、线程直接调用回调,由于无法知道主线程是否进行UI操作,所以把线程的回调进行了包装,使用Handler来发消息。保证不会崩溃。

 

 

项目下载地址:

http://download.csdn.net/download/leehu1987/7979253

 


尚未完成的功能:

1、断点下载(需要数据库)

2、如果下载完成了,下次下载应该是不需要下载了。

 

缺陷:

一个下载线程只能注册一个监听,比较好的办法是可以使用观察者模式通知各个页面。后续进行优化下。

 

 

一、定义一个接口,用于页面下载状态的监听;

<pre class="java" name="code">import java.io.Serializable;

public interface DownloadListener {

	public static class Data implements Serializable {
		private static final long serialVersionUID = 8954447444334039739L;
		private long currentSize;
		private long totalSize;

		public Data() {
		}

		public Data(int currentSize, int totalSize) {
			this.currentSize = currentSize;
			this.totalSize = totalSize;
		}

		public long getCurrentSize() {
			return currentSize;
		}

		public void setCurrentSize(long currentSize) {
			this.currentSize = currentSize;
		}

		public long getTotalSize() {
			return totalSize;
		}

		public void setTotalSize(long totalSize) {
			this.totalSize = totalSize;
		}

		@Override
		public String toString() {
			return "Data [currentSize=" + currentSize + ", totalSize="
					+ totalSize + "]";
		}

	}

	/**
	 * 
	 * @param data
	 *            : transfer downloaded data
	 */
	public void onProgress(Data data);

	/**
	 * 
	 * @param e
	 *            : exception
	 */
	public void onError(Exception e);

	public void onCompleted();
}
 

 

二、定义了一个Downloader父类,为了适应不同的下载,比如使用Http进行下载;使用代理进行下载等。

所以这个类是一个接口类,定义了一些基本的操作方法。

 

package com.example.downloader;


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值