在android异步加载ListView中的图片中使用异步方式加载的图片,当时要的急,写的很粗糙,是为每个图片加载一个线程来实现的。
可以用java concurrent很简明的实现类似功能,并且用到线程池。
这里加载的图片,都是从网上直接获取的。如果用android的UI线程,则需要图片全部加载后才能显示界面。
这里使用了concurrent api通过后台线程并发获取,本例中线程池中只有一个线程,可以设置为多个以加快加载速度。可参见使用java concurrent处理并发需求中的简单示例了解concurrent api的基本机制。
代码不复杂:
package com.easymorse.lazyload;
import java.net.URL;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ImageView;
public class LazyLoadImageActivity extends Activity {
private ExecutorService executorService = Executors.newFixedThreadPool(1);
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
loadImage("http://www.chinatelecom.com.cn/images/logo_new.gif", R.id.image1);
loadImage("http://www.baidu.com/img/baidu_logo.gif", R.id.image2);
loadImage("http://cache.soso.com/30d/img/web/logo.gif", R.id.image3);
}
@Override
protected void onDestroy() {
executorService.shutdown();
super.onDestroy();
}
private void loadImage(final String url, final int id) {
final Handler handler=new Handler();
executorService.submit(new Runnable() {
@Override
public void run() {
try {
final Drawable drawable = Drawable.createFromStream(
new URL(url).openStream(), "image.png");
handler.post(new Runnable() {
@Override
public void run() {
((ImageView) LazyLoadImageActivity.this
.findViewById(id))
.setImageDrawable(drawable);
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}
}
});
}
}
完整源代码见:
http://easymorse.googlecode.com/svn/tags/lazy.load.image-0.2.0/
可以对比一下不做异步处理的示例:
http://easymorse.googlecode.com/svn/tags/lazy.load.image-0.1.0/
分享到:
相关推荐
【Java下载器 用 Java 编写的URL下载器 workspace】是一个项目,主要目的是实现一个基于Java编程语言的URL资源下载工具。这个项目的工作空间包含了相关的源代码和可能的配置文件,便于开发者理解和学习如何利用Java...
本项目是用Java语言编写的一款类似于迅雷的下载器的源代码,旨在实现高效的多线程下载功能,以及实时的下载进度和流量显示,这对于学习和理解网络下载管理软件的开发具有很高的参考价值。 首先,让我们了解一下这个...
在Android开发中,异步加载图像是一项至关重要的技术,它能确保用户界面的流畅性,避免因图片加载导致的应用程序卡顿。本资料主要聚焦于如何有效地实现这一目标,包括利用线程池和缓存策略来优化图像加载过程。下面...
综上所述,实现“java 批量上传图片”涉及到了Java I/O、多线程、网络通信、文件处理、异常处理等多个方面,开发者需要对这些知识点有深入理解和实践,才能编写出稳定、高效的批量图片上传程序。
综上所述,开发一个用Java编写的歌曲下载程序涉及网络通信、文件I/O、异常处理、多线程以及可能的UI设计等多个方面。通过对这些技术的运用,你可以创建一个实用且功能完备的程序,让使用者方便地下载喜欢的音乐。
Java API 1.6 和 1.7 是Java开发的关键组成部分,它们包含了Java标准库的详细文档,这些库是编写Java应用程序和服务器端程序的基础。这两个版本在Java发展历程中占据了重要地位,引入了许多新特性,优化了性能,并...
10. **资源管理**:浏览器可能需要加载图片和其他外部资源,这涉及到I/O流的操作,如`java.io.FileInputStream`和`java.nio.file.Files`。 通过以上技术的组合运用,我们可以构建一个功能完备的Java Web浏览器。这...
5. **NIO.2**:新I/O(New I/O)API在1.6版本中进一步完善,提供了文件系统操作、异步I/O等功能,增强了I/O性能。 6. **脚本引擎支持**:JDK1.6开始支持JavaScript和其他脚本语言,通过JSR 223规范,可以在Java程序...
使用这些类和接口,开发者可以编写更加高效、可扩展和易于理解的并发代码,减少对低级同步原语(如 `synchronized` 和 `wait()`/`notify()`)的依赖,提高代码的可读性和正确性。此外,`java.util.concurrent` 包的...
在Java编程语言中,上传和下载功能是网络应用的核心部分,尤其在开发Web服务、文件管理系统或者云存储平台时。本资源提供了JAVA实现的上传和下载源代码,这对于理解和实践相关技术至关重要。以下是对这些源代码可能...
【Java下载文件小工具】是一款由个人开发者设计并编写的实用程序,主要功能是协助用户进行文件的下载操作。这款小工具特别适合Java初学者学习和参考,从中可以了解到Java编程语言在实现文件下载功能时的技术和思路。...
Java 8是Java平台的重大更新,引入了许多新特性,增强了语言功能,并且对标准库进行了大量改进。这个“Java8英文文档API .zip”包含了Java 8的官方API文档,对于学习和理解Java 8的新特性和编程模式至关重要。下面...
下载`concurrent.rar`文件,你将有机会学习到这些关键概念的实际示例和使用方法,进一步加深对Java并发编程的理解。通过深入研究,你可以编写出更加高效、安全的多线程程序,提升你的Java编程技能。
**并发编程**:Java并发库(java.util.concurrent)包含了许多高级并发工具,如`Semaphore`(信号量)、`CyclicBarrier`(循环屏障)、`CountDownLatch`(倒计时器)和`Future`接口等,这些工具帮助开发者编写高效、...
Java的设计目标是实现“一次编写,到处运行”,这在20世纪90年代末期,随着网络的普及和分布式计算的发展,成为了编程界的迫切需求。本资料包中的“Java 6程序设计实践教程源代码”提供了对这一版本Java编程的深入...
4. **多线程**:`java.lang.Thread`和`java.util.concurrent`包提供了线程相关的类和接口,支持并发编程。 5. **异常处理**:`java.lang.Throwable`及子类定义了异常处理机制,如`Exception`、`Error`等。 二、高级...
6. **线程管理**:考虑到网络请求通常需要异步执行以避免阻塞UI,开发者可能使用了`java.lang.Thread`或`java.util.concurrent`包中的类来处理并发。这样,网络请求可以在后台线程中进行,同时保持用户界面的响应性...
引入了文件系统API,支持异步I/O操作,增加了文件通道、文件属性和文件事件等功能。 #### 11. **动态语言支持(Dynamic Language Support)** Java 6增强了对动态语言的支持,如JRuby、Jython等,通过JSR 223和JSR ...
通过阅读这个中文版的API文档,开发者可以更好地掌握Java 1.7的特性和使用方法,编写出高效、稳定且易于维护的代码。无论你是初学者还是经验丰富的开发者,这份资料都将是你不可或缺的开发伙伴。
Java SE 7(Java Standard Edition 7)是Java平台的一个重要版本,引入了许多新特性和改进,使得开发者能够编写更加高效和可靠的程序。本篇文章将详细探讨Java虚拟机规范在Java SE 7中的主要内容。 1. 类加载机制:...