首先多线程的含义就是不止一个线程,具体线程的数量可以由实际情况决定。
例如这里我使用的是判断网络类型来选择线程数
ConnectivityManager conManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
String networkType = conManager.getActiveNetworkInfo().getTypeName();
if (networkType.equals("MOBILE")) {//再次进行区分
String netTypeInfo=conManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getExtraInfo();
if(netTypeInfo.equals("cmwap")){
threadNum=3;
urlStr="http://10.0.0.172:80"+urlStr.substring(7);
isCmwap=true;
}
if(netTypeInfo.equals("cmnet")){
threadNum=3;
}
threadNum=3;
}
if (networkType.equals("WIFI")) {
threadNum=5;
}
首先获取当前网络类型
ConnectivityManager conManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
String networkType = conManager.getActiveNetworkInfo().getTypeName();
这里可能是wifi也可能是mobile,wifi当然好说,如果是mobile又要涉及到cmwap
如果是cmwap则要设置代理,并且线程数也不用开很多,速度和开销不成正比。
顺带提下设置代理的一些方法,开始我做的时候查资料,好歹了解了cmwap需要通过移动的10.0.0.172:80网关访问外网,于是生搬硬套上了
if(netTypeInfo.equals("cmwap")){
threadNum=3;
urlStr="http://10.0.0.172:80"+urlStr.substring(7);
不过其实java还有更简洁的方法设置代理,例如httpClient.getHostConfiguration().setProxy("10.0.0.172",80);
然后再说下实现多线程下载的原理,首先多线程的数目确定下来以后就可以开线程去下载了。好比你修了几个水管,剩下的任务就是怎么样让这些水管里的水有序的流向水池中。
总文件的长度可以在连接的头文件当中取得
HttpURLConnection con = (HttpURLConnection) url.openConnection();
if (con.getHeaderFieldKey(i).equalsIgnoreCase(
"Content-length")) {//获得head的Content_length
contentlength = con.getHeaderField(i);
总长度以及分割的数目(水管的数目)都知道了,那么继续埋设管道以及是流水有序就是剩下的两个任务了。
其实管理线程很麻烦,在之前的项目里因为线程管理的失败导致程序经常卡死,后面对多线程并发异步都产生了一些阴影,还好java有很好的多线程管理工具-线程池.
关于线程池的介绍很多,大家可以有兴趣去看看。今天转眼都到10点了,照例我要去睡觉了,大家晚安。
分享到:
相关推荐
该demo实现了android平台的多线程下载的功能,代码注释比较详细,可以看看
Android中多线程下载原理实现案例...
使用多线程技术实现文件的下载,断点续传等功能,内置demo.apk,可以直接安装进行体验
Android实现网络多线程下载,断点续传,压缩包内有两个项目: downloadDemo:多线程下载 MulThreadDownloader:断点续传(网上别人的项目)
多线程下载:1、创建URL对象; 2、获取指定URL对象所指向资源的大小; 3、在本地磁盘上创建一个与网络资源相同大小的空文件; 4、计算每条线程应该下载网络资源的哪个部分; 5、依次创建、启动多线程来下载网络资源...
完成了在android平台上实现多线程下载的demo。
android客户端实现断点续传功能,可实现多线程断点续传下载。实现android端断点续传下载需要服务器的支持,本demo中包含了个人写的服务器端的下载功能的demo.
android 实现多线程下载源代码 代码详细 很好学习资料
Android----线程实现图片移动 , 运用线程实现图片的水平循环往返移动!
android 实现多线程断点下载,有开始 、暂停 、listview里面下载等功能
android客户端多线程下载,断点续传,多线程下载,网络编程详解代码 网络搜索《Android 4.0 网络编程详解代码》中的 第5章:Android中的网络数据下载及JSON的操作 中代码不全,少了个终于的activity,现自己跑通后上传以...
自己写的Android多线程多任务断点下载的一个Demo。 1.通过Service和线程池配合控制下载任务(包含分段下载)的开始和暂停; 2.通过数据库对文件信息以及下载线程信息进行保存,实现断点下载。 有发现的bug希望各路坛...
《Android多线程断点续传下载网络上的音/视频等各种文件》多线程,断点续传,各种网络上的数据,下载网络上的数据时基本功!加油了各位!
使用eclipse实现Android多线程下的简单字符串计数器
Android 实现多线程断点续传下载 源码,功能简洁实用
本文实例讲述了Android实现多线程下载文件的方法。分享给大家供大家参考。具体如下: 多线程下载大概思路就是通过Range 属性实现文件分段,然后用RandomAccessFile 来读写文件,最终合并为一个文件 首先看下效果图:...
基于android4.2实现了多线程下载。
android 实现多线程下载,包含下载工具类
实现Android的后台多任务多线程断点下载,断点的数据保存在sqlite数据库中
android多线程管理,实现多线程