安卓基础4:网络编程1_消息机制和图片处理
安卓基础4:网络编程1_消息机制和图片处理
网络html源码查看器
操作步骤:
1、 写界面
2、 连接网络httpurlConnection
3、 设置conn的一些参数,比如设置get方式请求,连接超时时间
4、 拿到服务器返回的状态码
5、 获取服务器返回的数据(以流的形式返回的)
网络返回的流格式很多,有jason,有xml等
ByteArrayOutputStream这个流适合读取内存数据,不需要关闭流;
6、把数据显示到textView上,之前要把in转换为String
7、记得加上访问网络权限
HttpURLConnection
代码:
界面:
事件处理:
方法层:
消息机制
1、应用无响应:Anr application not response
原因:
在主线程(ui线程)做了耗时的操作,主线程不能做耗时操作;eg:1、访问网络2、访问大的数据
(在2.3模拟器只是warm,而4.1之后变成了错误,谷歌让你必须创建子线程去运行)
2.3中:
4.1中:
解决方式:
1、只有主线程才可以更新UI;
再创建一个新的线程,
2、只要联网就必须用子线程执行
3、使用handler
安卓编程原则:
更新UI则:
放入handler中处理,操作耗时的操作则放入子线程中
消息机制的写法:
1、 创建一个handler对象
2、 重写handler的handMessage方法
3、 拿着你在主线程创建的handler助手发消息
4、 handleMessage方法就会执行在这个方法里面去
代码:
事物处理层:
handler原理:
主线程中有一个消息队列,通过Looper不停地查询队列是否有数据;Looper将消息从消息队列中取出,将其送到handler中进行处理;(Looper对象在内部自动执行)
网络图片查看器:
描述:
通过网络下载图片到Cache目录下,并对图片进行显示;在下载前查看Cache目录中是否所有图片,如果没有的话再去对网络进行图片请求;
步骤:
1、 画布局
2、 使用httpUrlConnection去获取数据
3、 把流转换成bitmap格式
4、 把数据显示到iv上(不能再子线程上更新ui,需要通过handler发送消息)
5、 加上网络权限
常见消息
代码:
界面:
事务处理层:
安卓审计系统:
安卓后面有个审计系统,当审计系统专门审计UI的更新时间,如果UI长时间未响应则报错。但是如果子线程更新UI时间间比较快,审计系统还没有开始便执行完毕,则并没有什么关系;
为了解决能在任意位置更新UI可以利用如下方法:
它通过handler封装;
Timer定时器:也是相当于主线程更新api
补充timer定时器方法:
新闻客户端案例:
采用smartimageView显示图片
1、github.com托管者所有
代码:
界面:
View界面:
事物处理层:
方法区: