Android ImageLoader 单例模式及关于打jar包的这点事
2015-07-19 20:22
543 查看
本篇博客主讲两部分,一,ImageLoader单例模式及初始化该如何做;二,如何打jar包。
先看第一个,ImageLoader是加载图片的,它不仅可以用来图片的异步加载,而且在加载的过程中有很多监听,跟进加载中的状态,方便我们做相应的处理,而且它本身有很好的缓存功能,能够有效的防止内存泄漏。用过listview的加载大量图片的朋友知道,内存泄漏是个很严重的问题。有了ImageLoader这个框架,内存泄漏的压力就会坚强很多。基于这两点,我觉得是ImageLoader被广泛使用的原因,也是它的成功之处。ImageLoader是一个单例模式,只能初始化一次,那么,到底该如何初始化呢?
新建1个类继承Application,重写OnCreate方法,把ImageLoader初始化的操作放到这个方法里面。因为Android整个项目Application是最早创建,而且只有1个,所以,它的onCreate方法里面写比较好,具体代码如下:
注意:你运行一下项目可能会看到
下面开始说第二部分,如何把android项目打成1个jar包呢?不打jar包的话,都要在eclipse里面引用才行,否则,应用跑不起来。但是1个应用,要引用那么多的项目,那eclipse不就满了吗?所以,最实用的办法是把项目打成jar包,放进libs目录下,就一劳永逸了。介绍一下具体打jar包的方法:
图1
图2
图3
注意:在图3上这个步骤时,一定一定要确保上图的2个红色框里面只选了src文件夹!!!如果在选src文件夹的同时,也选择了其他的文件夹,那么会报下面这个错误
先看第一个,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
相关文章推荐
- Android 数据库升级完整解决方案
- Android 数据库升级解决方案
- android colors.xml 开发必备
- android学习之LayoutInflater的用法,在myAdapter getView()里将多个TextView组件压缩成一个View控件,并在listView里显示
- Android JSON解析
- Android Graphic - Overview
- android5.0问题
- android 沉浸式状态栏
- android发展历史简介
- Android应用加解密--AndroidManifest文件加解密
- android RelativeLayout 内容居中解决办法:
- 深入Android【八】 —— Activity间数据传输
- Android序列化
- 50一个Android开发技巧(01 利用好layout_weight属性)
- Android 四大组件学习之Activity五
- 深入Android【七】 —— 资源文件
- 深入Android 【六】 —— 界面构造
- Android开源项目:贴纸标签相机,快给你的图片贴上贴纸打上标签吧!~
- android截图
- android自定义组件流程