Android

来源:互联网 发布:电子视频制作软件 编辑:程序博客网 时间:2024/05/17 19:59

Android 网络下载

这里主要介绍网络的基础知识,以及Android里进行下载的知识

1、Http与Https

Https为双向加密认证的方式,更加安全,这里主要介绍Android里的网络访问方式,不在这里对Http和https过多介绍

2、Android下载

从接触Android下载以来,对Android中下载的理解为,即通过地址访问前端,最后变成文件流的方式,进行保存到本地,说白了,就是文件流的下载,但是Android也有几种方式:HttpClient与HttpUrlConnection,
HttpClient有一个比较明显的例子:

public static synchronized HttpClient getHttpClient() {
if (null == customerHttpClient) {
HttpParams params = new BasicHttpParams();
// 设置一些基本参数
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, CHARSET);
HttpProtocolParams.setUseExpectContinue(params, true);
HttpProtocolParams
.setUserAgent(
params,
“Mozilla/5.0(Linux;U;Android 2.2.1;en-us;Nexus One Build.FRG83) ”
+ “AppleWebKit/553.1(KHTML,like Gecko) Version/4.0 Mobile Safari/533.1”);
// 超时设置
/* 从连接池中取连接的超时时间 */
ConnManagerParams.setTimeout(params, 1000); //1
/* 连接超时 */
HttpConnectionParams.setConnectionTimeout(params, 5000);//2,5
/* 请求超时 */
HttpConnectionParams.setSoTimeout(params, 5000);//4,5

        // 设置我们的HttpClient支持HTTP和HTTPS两种模式          SchemeRegistry schReg = new SchemeRegistry();          schReg.register(new Scheme("http", PlainSocketFactory                  .getSocketFactory(), 80));          schReg.register(new Scheme("https", SSLSocketFactory                  .getSocketFactory(), 443));          // 使用线程安全的连接管理来创建HttpClient          ClientConnectionManager conMgr = new ThreadSafeClientConnManager(                  params, schReg);          customerHttpClient = new DefaultHttpClient(conMgr, params);      }      return customerHttpClient;  } 

但是Android2.3之后,更加推崇HttpUrlConnection访问方式,Android里通过HttpUrlConnection下载的例子有可参考:
http://blog.csdn.net/u012527802/article/details/51153071

3、Android下载的难点

除了上面说的访问方式之后,Android下载里还有的难点有多线程下载以及断点续传,断点续传需要通过数据库存储,暂时不写,多线程是通过线程池来做,但是多线程的实现,需要注意线程池的使用

即使是但是文件,也可以使用多线程来下载,此时使用的是RandomAccessFile来进行索引下载流的位置:参考资料为:
http://blog.csdn.net/mad1989/article/details/38421465



对于多个文件并且文件较大的时候,可以使用线程池来进行下载,线程池可以分为:

(1) newCachedThreadPool()
(2) newFixedThreadPool()
(3) newScheduledThreadPool()
(4) SingleThreadExecutor
以上4种线程池到现在用的不多,具体看第三种线程池的用法
线程池的使用主要用到的类有:
这里写图片描述