使用ImageLoader实现图片异步加载

我们在加载大量的网络图片的时候,采用的方式不妥当的时候,经常会出现内存溢出的现象,导致程序崩溃,还有加载图片速度慢等一些问题。ImageLoader图片加载核心类,内部使用线程池加载图片灵活更改ImageLoader的基本配置,包括最大线程数、缓存方式、图片显示选项等;图片异步加载缓存机制,包括内存缓存(软引用)及本地缓存;对加载过程实现监听和事件处理;能够配置加载图片的显示选项,包括图片圆角处理和加载完成显示动画等好处可以基本上解决以上问题!

1. 官方网站下载最新的包 , universal-image-loader-1.8.4.jar加入到你项目的libs里面,注意引入项目,点击你的项目,右键——选择build path——configure build path——add jars,选择你项目下面libs里面的包。
 
2.配置Manifest文件,因为要进行网络请求和本地缓存,添加网络请求和访问外部存储的权限
 
<uses-permission android:name="android.permission.INTERNET" />  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
 
3.
p ublic class MyApplication extends Application {

    @Override

    public void onCreate() {

        super.onCreate();

//没有緩存的配置:

ImageLoaderConfiguration config=new ImageLoaderConfiguration.Builder(getApplicationContext())

                .threadPriority(Thread.NORM_PRIORITY - 2)

                .denyCacheImageMultipleSizesInMemory()

                .discCacheFileNameGenerator(new Md5FileNameGenerator())

                .tasksProcessingOrder(QueueProcessingType.LIFO)

                .enableLogging() // Not necessary in common   

                .build();

 

//有緩存的配置:

DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()

            .cacheInMemory()  

            .cacheOnDisc()    

            .build();

         ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)

            .defaultDisplayImageOptions(defaultOptions)

            .threadPriority(Thread.NORM_PRIORITY - 2)

            .denyCacheImageMultipleSizesInMemory()

            .discCacheFileNameGenerator(new Md5FileNameGenerator())

            .tasksProcessingOrder(QueueProcessingType.LIFO)

            .enableLogging()

            .build();

 

        ImageLoader.getInstance().init(config);

}

}

配置完成后,我们就可以在任何想用它的地方使用了。具体使用如下:

1.   ImageLoader.getInstance().displayImage(url, ImageView); 

2.   DisplayImageOptions  options = new DisplayImageOptions.Builder()
            .showStubImage(R.drawable.ic_stub)             //加载开始默认的图片      
            .showImageForEmptyUri(R.drawable.ic_empty)     //url爲空會显示drawable里面的图片
            .showImageOnFail(R.drawable.ic_error)          //加载图片出现问题,会显示此图片
            .cacheInMemory()                               //缓存用
            .cacheOnDisc()                                 //缓存用

        .imageScaleType(ImageScaleType.IN_SAMPLE_INT) 

 

        .bitmapConfig(Bitmap.Config.RGB_565)           // 防止内存溢出的,图片太多用这个

        .displayer(new RoundedBitmapDisplayer(5))      //图片圆角显示,值为整数
            .build();

      ImageLoader.getInstance().displayImage(url, imageView,options); 

3.ImageLoader.getInstance().loadImage(url,new SimpleImageLoadingListener(){
          public void onLoadingComplete(String imageUri, android.view.View view,               android.graphics.Bitmap loadedImage) {
           imageView.setImageBitmap(loadedImage);          //imageview控件对象
        };


         public void onLoadingFailed(String imageUri, android.view.View view, com.nostra13.universalimageloader.core.assist.FailReason failReason) {
          Toast.makeText(ShowOneImage.this,"加载失败", Toast.LENGTH_LONG).show();
        };
        @Override
        public void onLoadingStarted(String imageUri, View view) {
            
        }
        @Override
        public void onLoadingCancelled(String imageUri, View view) {


        }
});

 

参考文档: http://my.oschina.net/u/1858156/blog/338854

猜你喜欢

转载自18565891643.iteye.com/blog/2307862