Android:AysncTask异步加载

以下是链接:

http://blog.csdn.net/abc5382334/article/details/17097633

http://keeponmoving.iteye.com/blog/1515611

http://www.cnblogs.com/suinuaner/archive/2013/04/11/android_fifty.html

http://blog.csdn.net/lanjianhun/article/details/8675299

http://blog.csdn.net/alex0203/article/details/7646973

http://www.cnphp6.com/archives/58164

http://blog.csdn.net/weihan1314/article/details/8045993

转:

  1 package com.wyl.myasyctask;
  2
  3 import java.io.InputStream;
  4
  5 import android.app.Activity;
  6 import android.app.ProgressDialog;
  7 import android.content.Context;
  8 import android.graphics.Bitmap;
  9 import android.graphics.BitmapFactory;
 10 import android.os.AsyncTask;
 11 import android.os.Bundle;
 12 import android.util.Log;
 13 import android.view.View;
 14 import android.widget.Button;
 15 import android.widget.ImageView;
 16
 17 public class MainActivity extends Activity {
 18     private static final String sImageUrl = "http://fashion.qqread.com/ArtImage/20110225/0083_13.jpg";
 19     private Button mLoadButton;
 20     private ImageView mImageView;
 21
 22     @Override
 23     protected void onCreate(Bundle savedInstanceState) {
 24         super.onCreate(savedInstanceState);
 25         setContentView(R.layout.main);
 26
 27         Log.i("UI thread", " >> onCreate()");
 28
 29         mImageView = (ImageView) this.findViewById(R.id.ImageVivew);
 30
 31         mLoadButton = (Button) this.findViewById(R.id.LoadButton);
 32         mLoadButton.setOnClickListener(new View.OnClickListener() {
 33             @Override
 34             public void onClick(View v) {
 35                 LoadImageTask task = new LoadImageTask(v.getContext());
 36                 task.execute(sImageUrl);// 源码中得知,会调用onPreExecute()...方法
 37             }
 38         });
 39
 40     }
 41
 42     class LoadImageTask extends AsyncTask<String, Integer, Bitmap> {
 43         private ProgressDialog mProgressBar;
 44
 45         LoadImageTask(Context context) {
 46             mProgressBar = new ProgressDialog(context);
 47             mProgressBar.setCancelable(true);
 48             mProgressBar.setMessage("setMessage()...");
 49             mProgressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
 50             mProgressBar.setMax(100);
 51         }
 52
 53         @Override
 54         protected Bitmap doInBackground(String... params) {
 55             System.out.println("doInBackground()...");
 56
 57             Bitmap bitmap = null;
 58
 59             try {
 60                 publishProgress(10);
 61                 Thread.sleep(1000);
 62
 63                 InputStream in = new java.net.URL(sImageUrl).openStream();
 64                 publishProgress(60);
 65                 Thread.sleep(1000);
 66
 67                 bitmap = BitmapFactory.decodeStream(in);
 68                 in.close();
 69             } catch (Exception e) {
 70                 e.printStackTrace();
 71             }
 72
 73             publishProgress(100);
 74             return bitmap;
 75         }
 76
 77         @Override
 78         protected void onCancelled() {
 79             super.onCancelled();
 80         }
 81
 82         @Override
 83         protected void onPreExecute() {
 84
 85             mProgressBar.setProgress(0);
 86             mProgressBar.setMessage("Image downloading ... 0%");
 87             mProgressBar.show();
 88             System.out.println("onPreExecute()...");
 89         }
 90
 91         @Override
 92         protected void onPostExecute(Bitmap result) {
 93             System.out.println("onPostExecute()...");
 94             if (result != null) {
 95                 mProgressBar.setMessage("Image downloading success!");
 96                 mImageView.setImageBitmap(result);
 97             } else {
 98                 mProgressBar.setMessage("Image downloading failure!");
 99             }
100
101             mProgressBar.dismiss();
102         }
103
104         @Override
105         protected void onProgressUpdate(Integer... values) {
106             System.out.println("onProgressUpdate()...");
107             mProgressBar.setMessage("Image downloading ... %" + values[0]);
108             mProgressBar.setProgress(values[0]);
109         }
110     }
111
112 }

main.xml:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:id="@+id/AbsoluteLayout01"
 4     android:layout_width="fill_parent"
 5     android:layout_height="fill_parent"
 6     android:orientation="vertical" >
 7
 8     <Button
 9         android:id="@+id/LoadButton"
10         android:layout_width="fill_parent"
11         android:layout_height="wrap_content"
12         android:text="Load">
13     </Button>
14
15     <ImageView
16         android:id="@+id/ImageVivew"
17         android:layout_width="match_parent"
18         android:layout_height="400dip"
19         android:scaleType="centerInside"
20         android:padding="2dp">
21     </ImageView>
22
23 </LinearLayout>

时间: 2024-10-05 20:10:35

Android:AysncTask异步加载的相关文章

Android图片异步加载之Android-Universal-Image-Loader

将近一个月没有更新博客了,由于这段时间以来准备毕业论文等各种事务缠身,一直没有时间和精力沉下来继续学习和整理一些东西.最近刚刚恢复到正轨,正好这两天看了下Android上关于图片异步加载的开源项目,就顺便整理记录下来,作为这一个多月来博客的重新开火做饭吧.从今天起我会陆续恢复博客的更新,也希望大家继续支持. 今天要介绍的是Github上一个使用非常广泛的图片异步加载库Android-Universal-Image-Loader,该项目的功能十分强大,可以说是我见过的目前功能最全.性能最优的图片异

android listview 异步加载图片并防止错位

网上找了一张图, listview 异步加载图片之所以错位的根本原因是重用了 convertView 且有异步操作. 如果不重用 convertView 不会出现错位现象, 重用 convertView 但没有异步操作也不会有问题. 我简单分析一下: 当重用 convertView 时,最初一屏显示 7 条记录, getView 被调用 7 次,创建了 7 个 convertView. 当 Item1 划出屏幕, Item8 进入屏幕时,这时没有为 Item8 创建新的 view 实例, Ite

Android图片异步加载之Android-Universal-Image-Loader类库的使用

Android开发中我们会经常遇到图片过多或操作不当造成Out of Memory异常,有时虽然是解决了这个问题但却会影响程序的运行效率,例如:当用户在快速滑动滚动条的过程中,我们程序在仍在艰难的加载服务器端的图片,这样给用户造成了极不好的体验.其实网络上关于图片的异步加载和缓存的讲解很多,但是其实,写一个这方面的程序还是比较麻烦的,要考虑多线程,缓存,内存溢出等很多方面,针对这一广大开发者都会遇到的问题,一些牛人们已经帮我们解决了这一问题,今天我为大家介绍一款很流行的开源类库,可以很很好的解决

android listview 异步加载图片并防止错位+双缓存

网上找了一张图, listview 异步加载图片之所以错位的根本原因是重用了 convertView 且有异步操作. 如果不重用 convertView 不会出现错位现象, 重用 convertView 但没有异步操作也不会有问题. 我简单分析一下: 当重用 convertView 时,最初一屏显示 7 条记录, getView 被调用 7 次,创建了 7 个 convertView. 当 Item1 划出屏幕, Item8 进入屏幕时,这时没有为 Item8 创建新的 view 实例, Ite

Android图片异步加载之Android-Universal-Image-Loader(转)

今天要介绍的是Github上一个使用非常广泛的图片异步加载库Android-Universal-Image-Loader,该项目的功能十分强大,可以说是我见过的目前功能最全.性能最优的图片异步加载解决方案.做Android的同学都知道,Android加载大量图片时,由于系统分配给图片加载的内存大小有限,所以,如果加载图片量非常大的话容易报OOM异常,关于这个异常已经有不少解决方案了,我就不赘述.下面就简要介绍下这个开源项目的主要功能和使用: 一.功能概要 多线程图片加载: 灵活更改ImageLo

又优化了一下 Android ListView 异步加载图片

写这篇文章并不是教大家怎么样用listview异步加载图片,因为这样的文章在网上已经有很多了,比如这位仁兄写的就很好: http://www.iteye.com/topic/685986 我也是因为看了这篇文章而受到了启发. 先说说这篇文章的优点把,开启线程异步加载图片,然后刷新UI显示图片,而且通过弱引用缓存网络加载的图片,节省了再次连接网络的开销. 这样做无疑是非常可取的方法,但是加载图片时仍然会感觉到轻微的卡屏现象,特别是listview里的item在进行快速滑动的时候. 我找了一下原因,

Android AsyncTask异步加载WebAPI

之前做的程序一直存在很多问题,因为需要加载的Activity需要从网络加载数据.并没有完全正确的使用异步的方法去加载! 之前用的虽然是AsyncTask,但是在加载完成的时候还是并没有使用AsyncTask内置的方法去处理.而已傻傻的在OnCreate中处理.结果还是要等待AsyncTask加载完成后,等待OnCreate执行完成后,才load到Activity.这样子给人的第一感觉就是卡机了一样! 果断重新再写,这次的代码真是大换血.首先还是选择把带分页ListView进行封装了一下. 1 i

android listview 异步加载图片并防止错位 解决办法

网上找了一张图, listview 异步加载图片之所以错位的根本原因是重用了 convertView 且有异步操作. 如果不重用 convertView 不会出现错位现象, 重用 convertView 但没有异步操作也不会有问题. 我简单分析一下: 当重用 convertView 时,最初一屏显示 7 条记录, getView 被调用 7 次,创建了 7 个 convertView. 当 Item1 划出屏幕, Item8 进入屏幕时,这时没有为 Item8 创建新的 view 实例, Ite

自己动手写android图片异步加载库(二)

在<自己动手写android图片异步加载库>系列的第一篇文章中,主要是学习了使用ReferenceQueue来实现一个内存缓存.在这篇文章中主要是介绍在下载很多图片是怎么控制线程和队列.在这版代码里,加入信号量和队列,可以控制下载任务的顺序.可以控制暂停和结束. 代码A:ImageLoader.java /** * 图片加载工具类 * * @author qingtian * @blog http://blog.csdn.net/bingoSpunky */ @SuppressLint(&qu