Android学习笔记——网络编程

Handler消息机制
Android4.0以后不能在UI线程访问网络,而子线程也不能更新UI界面。为了根据下载进度实时更新UI界面,就需要用到Handler消息机制来实现线程间的通信。
Handler机制主要包括四个关键对象,分别是:Message、Handler、MessageQueue、Looper。
Message是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。
Handler主要用于发送消息和处理消息。一般使用Handelr对象的sendMessage()方法发送消息,消息经过一系列处理后,最终会传递到Handler的handlerMessage()方法中。
MessageQueue是消息队列的意思,它主要用来存放通过Handler发送的消息。通过Handler发送的消息会存在MessageQueue中等待处理。
Looper是每个线程中的MessageQueue的管家。调用Looper的loop()方法后,就会进入到一个无线循环中。然后一发现MessageQueue中存在一条消息,就会将它取出,并传递到Handler的HandlerMessage()方法中。
Handler消息处理首先需要在UI线程创建一个Handler对象,然后在子线程中调用Hanlder的sendMessage()方法,接着这个消息会存放在UI线程的MessageQueue中,通过Looper对象取出MessageQueue中的消息,最后分发回Hanlder的handleMessage()方法中。

AsyncTask借助AsyncTask,可以十分简单地从子线程切换到主线程,它的原理也是基于异步消息处理机制的。
AsyncTask是一个抽象类,它有三个泛型参数,分别如下所示:
Params:执行异步任务时需要传入的参数,用于后台任务中使用;
Progress:后台任务执行时,如果需要在界面上显示当前的进度,则使用该参数作为进度单位;
Result:当任务执行完毕后,如果需要对结果进行返回时,则使用该参数作为返回值类型;

HttpURLConnection在实际开发中,绝大多数的App都需要与服务器进行数据交互,此时就需要用到HttpURLConnection,它是一个标准的Java类。

URL url = new URL("http://www.itcast.cn"); 
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");                   
conn.setConnectTimeout(5000);                    
InputStream is = conn.getInputStream();       
try{
       //读取流信息,获得服务器返回的数据
}catch(Exception e){
} 
conn.disconnect(); 

在使用HttpURLConnection对象访问网络时,需要设置超时时间,如果不设置超时时间,在网络异常的情况下,会取不到数据而一直等待导致程序僵死不往下执行。

HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、功能丰富的、支持HTTP协议的客户端编程工具包。
使用HttpClient访问网络与HttpURLConnectiond的过程大致相同
1)创建HttpClient对象
2)指定访问网络的方式,创建一个HttpPost对象或者HttpGet对象
3)如果需要发送请求参数,可调用HttpGet、HttpPost的setParams()方法
4)调用HttpClient对象的execute()方法访问网络
5)调用HttpResponse.getEntity()方法获取HttpEntity对象

GET方式和POST方式提交数据
GET方式以实体的方式得到由请求URL所指向的资源信息,向服务器提交的参数跟在请求URL后面。使用GET方式访问网络URL的长度是有限制的,请求URL的长度要小于1K。
POST方式用来向目的服务器发出请求,要求它接收被附在请求后的实体。它向服务器提交的参数在请求后的实体中,POST方式对URL的长度是没有限制的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值