继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【Android中的Http通信】3-1 android多线程下载实例(源码)

泊之心
关注TA
已关注
手记 6
粉丝 9
获赞 117
1、DownLoad
public class DownLoad {

    private Executor thredPool = Executors.newFixedThreadPool(3);
    public static int finishedThread=0; 

    static class DownLoadRunnable implements Runnable{

        private String url;
        private String fileName;
        private long start,end;

        private TextView mTextView;
        private Handler mHandler;

        public DownLoadRunnable(String url, String fileName, long start,
                long end,Handler mHandler,TextView mTextView) {
            super();
            this.url = url;
            this.fileName = fileName;
            this.start = start;
            this.end = end;

            this.mTextView = mTextView;
            this.mHandler = mHandler;
        }

        @Override
        public void run() {
            try {
                HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
                conn.setConnectTimeout(5000);           
                conn.setRequestMethod("GET");
                conn.setRequestProperty("Range", "bytes="+start+"-"+end);

                RandomAccessFile raf = new RandomAccessFile(new File(fileName), "rwd");
                raf.seek(start);
                InputStream is = conn.getInputStream();
                byte[] buffer = new byte[1024];
                int len=0;
                while((len=is.read(buffer))!=-1){
                    raf.write(buffer,0,len);
                }

                if(raf!=null){
                    raf.close();
                }
                if(is!=null){
                    is.close();
                }
                finishedThread++;
                if(finishedThread==3){
                    mHandler.post(new Runnable() {

                        @Override
                        public void run() {
                            mTextView.setText("下载完成!");
                        }
                    });
                }

            } catch (ProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }

    public void downFile(String path,Handler mHandler,TextView mTextView) throws Exception{

        HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection();
        conn.setConnectTimeout(5000);
        conn.setRequestMethod("GET");

        int count = conn.getContentLength();
        int block = count/3;
        String fileName = Environment.getExternalStorageDirectory().getAbsolutePath()+"/1.rar";
        for(int i=0;i<3;i++){
            long start = i*block;
            long end = start+block-1;
            if(i==2){
                end = count;
            }
            DownLoadRunnable mRunnable = new DownLoadRunnable(path, fileName, start, end,mHandler,mTextView);
            thredPool.execute(mRunnable);

        }

    }

}
2、MainActivity
public class MainActivity extends Activity {

    private TextView mTextView;
    private Handler mHandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = (TextView) findViewById(R.id.textView);
        mHandler = new Handler();

        new Thread(){
            public void run() {

                DownLoad load = new DownLoad();
                try {
                    load.downFile("http://file02.daimg.com/2012/photo/1206/DAimG_2012062679170543R693.rar",mHandler,mTextView);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            };
        }.start();

    }

}
打开App,阅读手记
6人推荐
发表评论
随时随地看视频慕课网APP