使用观察者模式设计下载器,View
为观察者监听被观察者Download
,当被观察者的状态发生改变时通知观察者
监听器接口
public interface DownloadListener{
beforeConnected(){
}
afterConnected(){
}
onProgress(){
}
onFinished(){
}
}
Download
类
public class Download{
String url;
String path;
DownloadListener l;
int tag;
Download(String url,DownloadListener l,int tag){
}
addHeader(){
}
setPath(){
}
setAppend(){
}
download(){
l.beforeConnected();
request();//请求网络
l.connected();
save();//保存文件
l.finishied();
}
request(){
}
save(){
....
onProgress();
....
}
pause(){
}
//`path`为空时调用此方法
getDefaultPath(){
}
}
DownloadRunnable
public class DownloadRunnable implements Runnable{
public Download d;
DownloadRunnable(Download d){
}
run(){
d.download();
}
}
DownloadsControl
实现多任务下载以及开始/暂停控制
public class DownloadsControl{
List<Download> list;
ExecutorService executor;
add(Downloads d){
list.add(d);
}
start(int tag){
findByTag()
executor.execute(new DownloadRunnable(d));
}
pause(int tag){
findByTag()
d,pause();
}
remove(int tag){
pause();
list.remove();
}
getInfo(int tag){
}
}
Activity
监听Download
的变化,在UI线程中更新View
public class MainActivity extends AppCompatActivity {
DownloadControl control;
ListView listView;
DownloadListener listener=new DownloadListener(){
beforeConnected(){
}
afterConnected(){
getLength();
}
onProgress(){
//在UI线程更新View
runOnUIThread();
updateProgress();
}
onFinished(){
if(pause){
savedata();
}
}
} ;
onCreate(){
}
newDownlod(){
d=new Download(url, listener, tag)
control.add();
}
startDownload(){
control.start();
}
pauseDownload(){
control.pause();
}
}