多线程下载

来源:互联网 发布:邮票淘宝 编辑:程序博客网 时间:2024/05/29 09:12

package bwie.com.xiazi;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;

import rx.Subscriber;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import zlc.season.rxdownload.DownloadStatus;
import zlc.season.rxdownload.RxDownload;

public class MainActivity extends AppCompatActivity {

private ProgressBar progressBar;private Button kaishi;private Button zanting;private Subscription subscription;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    progressBar = (ProgressBar) findViewById(R.id.progressBar);    kaishi = (Button) findViewById(R.id.kaishi);    zanting = (Button) findViewById(R.id.zanting);    kaishi.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            subscription = RxDownload.getInstance()                    // .defaultSavePath(defaultSavePath)//设置默认的下载路径                    .maxThread(10)     //设置最大线程                    .maxRetryCount(10) //设置下载失败重试次数                    .download("http://mp4.vjshi.com/2013-05-28/2013052815051372.mp4", "weixin.mp4", null)                    .subscribeOn(Schedulers.io())                    .observeOn(AndroidSchedulers.mainThread())                    .subscribe(new Subscriber<DownloadStatus>() {                        @Override                        public void onCompleted() {                            Toast.makeText(MainActivity.this, "下载成功", Toast.LENGTH_SHORT).show();                        }                        @Override                        public void onError(Throwable e) {                        }                        @Override                        public void onNext(final DownloadStatus status) {                            long totalSize = status.getTotalSize();                            long downloadSize = status.getDownloadSize();                            int result;                            if (totalSize == 0L) {                                result = 0;                            } else {                                result = (int) (downloadSize * 100 / totalSize);                            }                            Log.e("result", result + "");                            // int i = Integer.parseInt(status.getFormatStatusString());                            // Log.e("下载量", i + "");                            progressBar.setProgress(result);                        }                    });        }    });    zanting.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            //...//取消订阅, 即可暂停下载, 若服务端不支持断点续传,下一次下载会重新下载,反之会继续下载            if (subscription != null && !subscription.isUnsubscribed()) {                subscription.unsubscribe();            }        }    });}

}