本篇博客主讲两部分,一,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包的方法:
图1
图2
图3
注意:在图3上这个步骤时,一定一定要确保上图的2个红色框里面只选了src文件夹!!!如果在选src文件夹的同时,也选择了其他的文件夹,那么会报下面这个错误
Error generating final archive: Found duplicate file for APK: AndroidManifes