`
huangqinqin
  • 浏览: 367224 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

Adnroid 异步加载网络图片

 
阅读更多
ApkAsyncTask.java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.view.View;
import android.view.View.OnClickListener;

/**
* AsyncTask中
* 第一个参数Apknfo和doInBackground(....)中的参数保持一致
* 第二个参数Bitmap和onProgressUpdate(...)中的参数保持一致,由publishProgress()传递该值
* 第三个参数Apknfo和onPostExecute(....)中的参数保持一致,也是doInBackground(....)返回值类型
* doInBackground(....)的返回值传给onPostExecute(....)执行,也即是onPostExecute(....)的参数
* @author huangqin
*
*/
public class ApkAsyncTask extends AsyncTask<ApkInfo, Integer, ApkValue>{

private ViewHolder mHolder;
private ApkValue mApkValue;

private Context mContext;
private ApkInfo mApkInfo;

public ApkAsyncTask(Context context, ViewHolder holder) {
this.mContext = context;
mHolder = holder;
mApkValue = new ApkValue();
}

@Override
protected void onPreExecute() {

super.onPreExecute();
}

@Override
protected ApkValue doInBackground(ApkInfo... params) {
mApkInfo = params[0];
mApkValue.setApkPic(resolverApkPic(mApkInfo.getApkItemPicUrl())); // download picture from internet
mApkValue.setApkName(mApkInfo.getApkItemName());
mApkValue.setApkFile(mApkInfo.getApkFileUrl());
//publishProgress(mBitmap);

return mApkValue;
}

@Override
protected void onPostExecute(ApkValue result) {
// refresh UI
mHolder.contentItemPic.setImageBitmap(result.getApkPic());
mHolder.contentItemName.setText(result.getApkName());
/*mHolder.contentItemDownload.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {


}
});*/
super.onPostExecute(result);
}

@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}

@Override
protected void onCancelled() {

super.onCancelled();
}

    private Bitmap resolverApkPic (String apkPicUrl) {   
URL tmpURL;
Bitmap bmap = null;
// from http service
    try {
    tmpURL = new URL(apkPicUrl);
    HttpURLConnection conn = (HttpURLConnection) tmpURL.openConnection();
    conn.connect();  
    InputStream is = conn.getInputStream();
    bmap = BitmapFactory.decodeStream(is);
    is.close();
    } catch (IOException e) {
    e.printStackTrace();
    }

// from sdcard
/*bmap = BitmapFactory.decodeFile(apkPicUrl);

int apkPicWidth = (int)(mWinWidth * 0.25);
int apkPicHeight = (int)(mWinHeight * 0.11);
bmap.createScaledBitmap(bmap, apkPicWidth, apkPicHeight, true);*/

    if(bmap==null)
    bmap=BitmapFactory.decodeResource(mContext.getResources(), R.drawable.loading);
   
return bmap;   
    }  

}


ViewHolder.java
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

public class ViewHolder {
ImageView contentItemPic;
TextView contentItemName;
ImageButton contentItemDownload;
}


ApkValue.java
import android.graphics.Bitmap;

public class ApkValue {

private Bitmap mApkPic;
private String mApkName;
private String mApkFile;

public ApkValue() {

}

public Bitmap getApkPic() {
return mApkPic;
}

public void setApkPic(Bitmap bitmap) {
mApkPic = bitmap;
}

public String getApkName() {
return mApkName;
}

public void setApkName(String name) {
mApkName = name;
}

public String getApkFile() {
return mApkFile;
}

public void setApkFile(String fileUrl) {
mApkFile = fileUrl;
}
}



在UI界面初始化ApkAsyncTask,并执行execute方法。如下:
ApkAsyncTask mApkAsyncTask = null;
ViewHolder mHolder = new ViewHolder();
private ApkInfo mApkInfo = null; // A apk
private ArrayList<ApkInfo> mApkInfoList = null; // The total apks

mHolder = (ViewHolder)convertView.getTag();
mApkInfo = mApkInfoList.get(position);
mApkAsyncTask = new ApkAsyncTask(mContext, mHolder);
mApkAsyncTask.execute(mApkInfo);

分享到:
评论

相关推荐

    Android异步加载网络图片

    以上就是关于“Android异步加载网络图片”这一主题的主要知识点,理解并掌握这些内容,对于开发出流畅、高效的Android应用至关重要。在实际项目中,开发者可以根据需求选择合适的库或方法,确保图片加载的高效性和...

    android异步加载网络图片

    以下是对"android异步加载网络图片"这个主题的详细解析。 一、异步处理的重要性 在Android系统中,主线程主要负责处理用户交互,如果在主线程中执行耗时操作(如网络请求或图片解码),会阻塞UI更新,导致应用出现...

    android异步加载网络图片实例

    以上就是关于“Android异步加载网络图片实例”的核心知识点,通过理解并熟练运用这些技术,可以提升应用的性能和用户体验。在实际项目中,可以根据需求选择最适合的库和策略,结合最佳实践来优化图片加载流程。

    Android异步加载网络图片(线程)

    在Android应用开发中,异步加载网络图片是...总之,Android异步加载网络图片结合LruCache和线程回调是一种高效且实用的策略,可以显著提升应用的性能和用户体验。理解并掌握这些知识点对于Android开发者来说至关重要。

    android异步加载网络图片插件

    "android异步加载网络图片插件"就是为了解决这个问题而诞生的一个开源库,它能够在不阻塞主线程的情况下,高效、智能地加载并显示网络上的图片。这个库在GitHub上广受欢迎,因其强大的功能和良好的性能优化而被广泛...

    android异步加载网络图片到ListView

    总结来说,实现"android异步加载网络图片到ListView"涉及到以下几个关键步骤: 1. 使用AsyncTask或其他异步处理方式在后台线程加载网络图片。 2. 应用ViewHolder模式优化ListView的滚动性能。 3. 自定义Adapter,...

    android异步加载网络图片,双缓存内存加sd卡缓存 绝对不会出现内存溢出oom

    总的来说,"android异步加载网络图片,双缓存内存加sd卡缓存 绝对不会出现内存溢出oom"这个主题涉及到的关键技术包括异步编程、内存管理、缓存策略以及图片处理。通过合理的实践和优化,我们可以创建出一个高效、...

    android异步加载网络图片的实现

    ### Android异步加载网络图片的实现 #### 实现思路与技术要点 在Android开发中,为了提高用户体验并避免UI阻塞,通常会采用异步加载的方式处理网络请求,特别是加载图片资源时。以下是对该实践的技术要点进行的...

    Android异步加载网络图片二例

    在Android开发中,异步加载网络图片是一项...总结起来,Android异步加载网络图片的核心是利用多线程和消息机制,确保图片加载过程不会阻塞主线程。通过合理地运用这些技术,开发者可以构建出流畅且高效的图片加载体验。

    Android异步加载网络图片(Eclipse)

    5. **异步加载图片** 使用`DisplayImage`方法加载网络图片到ImageView: ```java ImageLoader.getInstance().displayImage(imageUrl, imageView, options); ``` 这里的`imageUrl`是网络图片的URL,`imageView`...

    Android异步加载图片例子

    在这个"Android异步加载图片例子"中,我们将探讨如何在Android应用中实现这一功能。 首先,我们需要理解Android的主线程(UI线程)与工作线程的区别。主线程负责处理用户界面交互,而工作线程则用于执行耗时操作,...

    Android 图片异步加载 加载网络图片

    在Android应用开发中,图片加载是一项常见的任务,尤其是在处理大量图片或者网络图片时,为了提供良好的用户体验,我们通常会采用异步加载的方式。本篇将深入探讨Android平台上的图片异步加载策略,以及如何加载网络...

    android Gridview 异步加载网络图片

    2. ** 异步加载图片的重要性** - 直接在主线程加载网络图片会导致应用卡顿,用户体验下降,因为主线程负责处理用户交互和UI更新。 - 异步加载是在后台线程执行耗时操作,如下载和解码图片,然后在主线程更新UI,...

    android Gallery实现异步加载网络图片

    android Gallery实现异步加载网络图片 并只加载当前停止页面图

    Android 异步加载图片实现_图片缓存.zip

    综上所述,Android异步加载图片和缓存策略是提升应用性能的关键技术。通过合理使用工作线程和缓存机制,可以显著改善用户体验,降低系统负载。在实际开发中,选择合适的图片加载库,并结合最佳实践,能够帮助我们...

    android异步加载图片

    "Android异步加载图片"是一个常见的需求,它涉及到用户体验优化、内存管理以及线程安全等多个方面。这里我们将深入探讨这个主题,并结合提供的"ImageLoader-develop"可能是一个图片加载库的源码,来讲解相关的知识点...

    异步加载网络图片

    缓存机制是异步加载图片中的重要组成部分,分为内存缓存和磁盘缓存。内存缓存能快速响应图片请求,但当内存不足时会被系统回收。磁盘缓存则可以长期保存图片,即使应用关闭后仍能复用,但读取速度相对较慢。通过合理...

    Android AsyncTask用法和异步加载图片.rar

    本资料包主要讲解了如何使用`AsyncTask`进行异步加载图片,这对于在UI线程中保持流畅用户体验至关重要。 `AsyncTask`是Android SDK中的一个类,它为开发者提供了简单的多线程和回调功能。它的核心思想是将长时间...

    android Gallery实现异步加载网络图片 并只加载当前停止页面图.zip

    然后,我们需要创建一个自定义的`Gallery`适配器,这个适配器会负责获取每个图片的URL,并使用`Glide`异步加载图片: ```java public class ImageAdapter extends BaseAdapter { private Context context; ...

Global site tag (gtag.js) - Google Analytics