|
|
51CTO旗下网站
|
|
移动端

10.2.7 实战:异步下载网络图片(1)

《Android应用开发全程实录》第10章Android网络,本章和大家分享一下,在Android平台中是如何利用网络给大家的生活和工作带来方便的,希望通过本章的学习,读者能够了解到Android平台下网络开发的特点。本节为大家介绍实战:异步下载网络图片。

作者:裴佳迪/马超/孙仁贵来源:人民邮电出版社|2011-12-07 14:05

10.2.7  实战:异步下载网络图片(1)

学习了网络部分,了解到网络给我们的应用带来丰富多彩的信息和资源。带来好处的同时,却因为请求网络资源慢或者资源大,造成Android应用在网络部分延时,用户体验下降。如何解决这一部分?有很多办法,下面介绍一种异步方法(AsyncTask),希望能给读者在以后的网络开发时带来便利。

AsyncTask接口,在上面Android网络接口中已经简单介绍过,但因为AsyncTask接口内容较多也相对比较复杂,所以专门通过一个实战小项目来阐述这个问题。实战前,先了解AsyncTask接口的工作流程。

AsyncTask是抽象类.AsyncTask定义了3种泛型类型 Params、Progress和Result。

(1)Params 启动任务执行的输入参数,如HTTP请求的URL。

(2)Progress 后台任务执行的百分比。

(3)Result 后台执行任务最终返回的结果,如String。

当一个异步任务被执行,这个任务要完成四步。

(1)onPreExecute(),任务被执行之后,立刻调用 UI线程。这步通常被用于设置任务,例如,在用户界面显示一个进度条。

(2)doInBackground(Params...),onPreExecute()完成执行,立刻调用后台线程,这步被用于执行较长时间的后台计算。异步任务的参数也被传到这步。计算的结果必须在这步返回,将传回到上一步。

(3)onProgressUpdate(Progress...),一次呼叫 publishProgress(Progress...)后调用 UI线程,执行的时机没有定义。这个方法用于在用户界面显示进度,用后台计算,这个方法可以被用于一个进度条动画或在文本域显示日志。

(4)onPostExecute(Result),当后台计算结束时,调用 UI线程。后台计算结果作为一个参数传递到这步。

必须遵守4条规则,这个类才会正确的工作:

(1)任务实例必须创建在 UI线程;

(2)execute(Params...)必须在 UI线程上调用;

(3)不要手动调用;onPreExecute()onPostExecute(Result)doInBackground (Params...)onProgress- Update(Progress...)

(4)任务会执行仅一次(假如有第二个尝试去执行,将抛出一个异常)。

了解了AsyncTask接口规则,首先画一个草图,做出来的效果如图10-21所示。加载图片过程中,不分先后顺序,哪个图片先下载完,就显示哪个图片,它们相互不影响。

 
图10-21  异步图片草图

实例:

实战代码来源:Reality_10_01。

***步:准备工作,收集图片。

第二步:创建Android项目。

第三步:考虑到项目需要联网操作,所以在AndroidManifest.xml文件中添加权限配置:

  1. <uses-permission android:name="android.permission.INTERNET"></uses-permission>。 
第四步:根据草稿图画Layout配置文件,有6张图片,分成3排,每排两个图片,所以,配置文件(main.xml)如下:
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:orientation="vertical" android:layout_width="fill_parent" 
  4.     android:layout_height="fill_parent"> 
  5.     <LinearLayout android:orientation="horizontal" 
  6.         android:layout_width="fill_parent" android:layout_height="wrap_content"> 
  7.         <ImageView style="@style/imageView_style" android:id="@+id/imgV_01" /> 
  8.         <ImageView style="@style/imageView_style" android:id="@+id/imgV_02" /> 
  9.     </LinearLayout> 
  10.     <LinearLayout android:orientation="horizontal" 
  11.         android:layout_width="fill_parent" android:layout_height="wrap_content"> 
  12.         <ImageView style="@style/imageView_style" android:id="@+id/imgV_03" /> 
  13.         <ImageView style="@style/imageView_style" android:id="@+id/imgV_04" /> 
  14.     </LinearLayout> 
  15.     <LinearLayout android:orientation="horizontal" 
  16.         android:layout_width="fill_parent" android:layout_height="wrap_content"> 
  17.         <ImageView style="@style/imageView_style" android:id="@+id/imgV_05" /> 
  18.         <ImageView style="@style/imageView_style" android:id="@+id/imgV_06" /> 
  19.     </LinearLayout> 
  20. </LinearLayout> 

因为图片比较多,为了统一配置样式,此处引用配置文件(style.xml):

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <resources> 
  3.     <style name="imageView_style"> 
  4.         <item name="android:layout_width">128dp</item> 
  5.         <item name="android:layout_height">128dp</item> 
  6.     </style> 
  7. </resources> 
【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

276人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

643人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

超级网管员——网络安全

本书全面深入地介绍网络安全的配置与实现技术,包括系统管理、用户账户、病毒防御、灾难恢复、文件备份、安全策略、注册表等服务器安全,用...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客