本篇博客主讲两部分,一,ImageLoader单例模式及初始化该如何做;二,如何打jar包。

先看第一个,ImageLoader是加载图片的,它不仅可以用来图片的异步加载,而且在加载的过程中有很多监听,跟进加载中的状态,方便我们做相应的处理,而且它本身有很好的缓存功能,能够有效的防止内存泄漏。用过listview的加载大量图片的朋友知道,内存泄漏是个很严重的问题。有了ImageLoader这个框架,内存泄漏的压力就会坚强很多。基于这两点,我觉得是ImageLoader被广泛使用的原因,也是它的成功之处。ImageLoader是一个单例模式,只能初始化一次,那么,到底该如何初始化呢?

     新建1个类继承Application,重写OnCreate方法,把ImageLoader初始化的操作放到这个方法里面。因为Android整个项目Application是最早创建,而且只有1个,所以,它的onCreate方法里面写比较好,具体代码如下:

public class myApplication extends Application{

	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
		String imgurl=Environment.getExternalStorageDirectory().getAbsolutePath()+"/Imageload/";
		File cacheDir = new File(imgurl);
		if (!cacheDir.exists()) {
			cacheDir.mkdirs();
		}
		ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
				this)
				.memoryCacheExtraOptions(720, 1280)
				// default = device screen dimensions
				.threadPoolSize(3)
				// default
				.threadPriority(Thread.NORM_PRIORITY - 1)
				// default
				.tasksProcessingOrder(QueueProcessingType.FIFO)
				// default
				.denyCacheImageMultipleSizesInMemory()
				.memoryCache(new WeakMemoryCache())
				.memoryCacheSize(2 * 1024 * 1024)
				.memoryCacheSizePercentage(13)
				// default
				.diskCache(new BaseDiskCache(cacheDir) {
				})
				// default
				.diskCacheSize(50 * 1024 * 1024)
				.diskCacheFileCount(100)
				.diskCacheFileNameGenerator(new Md5FileNameGenerator())
				// default
				.imageDownloader(
						new BaseImageDownloader(getApplicationContext())) // default
				.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
				.writeDebugLogs()
				.build();
		ImageLoader.getInstance().init(config);
	}

}

上面这个初始化代码ImageLoader是有缓存机制的。内存缓存和SD卡缓存都有。

注意:你运行一下项目可能会看到

E/AndroidRuntime(25457): java.lang.RuntimeException: Unable to start activity , java.lang.IllegalStateException: ImageLoader must be init with configuration before using


相信只要英语稍微好一点的朋友会知道,错误原因这是在ImageLoader使用前没有初始化。为什么呢?我不是在OnCreate里面初始化了吗?我这个类也继承Application了,为什么呢?因为你这个application没有在配置文件里面写,一定一定要写在配置文件里面!!!

下面开始说第二部分,如何把android项目打成1个jar包呢?不打jar包的话,都要在eclipse里面引用才行,否则,应用跑不起来。但是1个应用,要引用那么多的项目,那eclipse不就满了吗?所以,最实用的办法是把项目打成jar包,放进libs目录下,就一劳永逸了。介绍一下具体打jar包的方法:

java 重写jar包并覆盖_内存泄漏

图1

java 重写jar包并覆盖_java 重写jar包并覆盖_02

图2

java 重写jar包并覆盖_jar包_03

图3


注意:在图3上这个步骤时,一定一定要确保上图的2个红色框里面只选了src文件夹!!!如果在选src文件夹的同时,也选择了其他的文件夹,那么会报下面这个错误

Error generating final archive: Found duplicate file for APK: AndroidManifes