Android 网络图片加载缓存处理库的使用

网络图片加载库的特点及优势

    Universal-ImageLoader的简介和特点:

        Universal-ImageLoader是目前Android主流的图片处理库框架之一,作者是白俄罗斯

    的Sergey Tarasevich。

        在Android图片处理中需要考虑的问题很多,例如 OOM、图片缓存和网络图片加载、

    多线程问题及图片压缩处理等等复杂的问题。但是Universal-ImageLoader已经帮我们把

    这些问题处理好了,对外提供了相应的完善的请求API,我们只需要按照要求使用即可。

 

    Universal-ImageLoader特点:

        1.支持本地图片和网络图片的多线程异步加载和缓存处理

        2.个性化的配置自己项目的ImageLoader

        3.图片加载过程的监听回调

        4.自动加载的图片针对当前剩余内存进行裁剪优化,防止OOM

        5.较好的控制图片的加载过程,例如暂停图片加载,重新加载图片

        缺点:没有对本地文件压缩处理的相关API方法以及默认都是Src模式设置图片没有针

        对Background属性开放API。

 

 

    Picasso的简介和特点:

        Picasso是Square公司开源的一个Android图形缓存库。可以实现图片下载和缓存功能。

        特点:

        1.加载网络或本地图片并自动缓存处理

        2.链式调用

        3.图形转换操作,如变换大小,旋转等,提供了接口来让用户可以自定义转换操作

        4.在Adapter中回收和取消当前的下载功能

 

 

    总结:

        1.都有高效的网络图片下载和缓存性能

        2.Universal-ImageLoader功能多,灵活使用配置

        3.Picasso使用复杂的图片压缩转换来尽可能的减少内存消耗

        4.在Adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位,

        Picasso已经解决了这个问题。

 

 

 

    Universal-ImageLoader加载图片:

        首先在项目中导入universal-image-loader-XXX.jar包

 

        activity.xml文件中:

            <ImageView

                android:id="@+id/iv_img"

                android:layout_width="fill_parent"

                android:layout_height="wrap_content"/>

 

        新建一个MyApplication类,用于对框架的配置:

            public class MyApplication extends Application {

   

                @Override

                public void onCreate() {

                    super.onCreate();

                   

                    ImageLoaderConfiguration config = new ImageLoaderConfiguration

                            .Builder(this)

                            .memoryCacheExtraOptions(480, 800)

                            // max width, max height,即保存的每个缓存文件的最大长宽

                            .discCacheExtraOptions(480, 800, null)

                            // Can slow ImageLoader, use it carefully (Better don't use

                            // it)/设置缓存的详细信息,最好不要设置这个

                            .threadPoolSize(3)

                            // 线程池内加载的数量

                            .threadPriority(Thread.NORM_PRIORITY - 2)

                            .denyCacheImageMultipleSizesInMemory()

                            .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024))

                            // You can pass your own memory cache

                            // implementation/你可以通过自己的内存缓存实现

                            .memoryCacheSize(2 * 1024 * 1024)

                            .discCacheSize(50 * 1024 * 1024)

                            .discCacheFileNameGenerator(new Md5FileNameGenerator())

                            // 将保存的时候的URI名称用MD5 加密

                            .tasksProcessingOrder(QueueProcessingType.LIFO)

                            .discCacheFileCount(100)

                            // 缓存的文件数量

                            .discCache(

                                    new UnlimitedDiscCache(new File(Environment

                                            .getExternalStorageDirectory()

                                            + "/myApp/imgCache")))

                            // 自定义缓存路径

                            .defaultDisplayImageOptions(getDisplayOptions())

                            .imageDownloader(

                                    new BaseImageDownloader(this, 5 * 1000, 30 * 1000))

                            .writeDebugLogs() // Remove for release app

                            .build();// 开始构建

                    ImageLoader.getInstance().init(config);    

                }

               

                private DisplayImageOptions getDisplayOptions(){

                    DisplayImageOptions options;

                    options = new DisplayImageOptions.Builder()

                                    .showImageOnLoading(R.drawable.ic_launcher) // 设置图片在下载期间显示的图片

                                    .showImageForEmptyUri(R.drawable.ic_launcher)// 设置图片Uri为空或是错误的时候显示的图片

                                    .showImageOnFail(R.drawable.ic_launcher) // 设置图片加载/解码过程中错误时候显示的图片

                                    .cacheInMemory(true)// 设置下载的图片是否缓存在内存中

                                    .cacheOnDisc(true)// 设置下载的图片是否缓存在SD卡中

                                    .considerExifParams(true) // 是否考虑JPEG图像EXIF参数(旋转,翻转)

                                    .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)// 设置图片以如何的编码方式显示

                                    .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型//

                                    // .delayBeforeLoading(int delayInMillis)//int

                                    // delayInMillis为你设置的下载前的延迟时间

                                    // 设置图片加入缓存前,对bitmap进行设置

                                    // .preProcessor(BitmapProcessor preProcessor)

                                    .resetViewBeforeLoading(true)// 设置图片在下载前是否重置,复位

                                    .displayer(new RoundedBitmapDisplayer(20))// 是否设置为圆角,弧度为多少

                                    .displayer(new FadeInBitmapDisplayer(100))// 是否图片加载好后渐入的动画时间

                                    .build();// 构建完成

                    return options;    

                }               

            }

 

        MainActivity.java源文件中:

            /**

             * 1、 Universal-ImageLoader的配置

             *

             * 2、用Universal-ImageLoader加载网络图片和本地图片

             *

             * @author FeiNiu

             *

             */

 

            public class MainActivity extends Activity {

               

                private ImageLoader loader;

                private ImageView iv_img;

 

                @Override

                protected void onCreate(Bundle savedInstanceState) {

                    super.onCreate(savedInstanceState);

                    setContentView(R.layout.activity_main);

                   

                    loader = ImageLoader.getInstance();

                    iv_img = (ImageView) this.findViewById(R.id.iv_img);

                    //String url = "file:///" + "本地路径";

                   

                    loader.displayImage(

                            "http://p4.so.qhimg.com/t011b5b943d48cb7aae.jpg",

                            iv_img, new ImageLoadingListener() {

                               

                                @Override

                                public void onLoadingStarted(String arg0, View arg1) {

                                    Log.i("info", "onLoadingStarted");                     

                                }

                               

                                @Override

                                public void onLoadingFailed(String arg0, View arg1, FailReason arg2) {

                                    Log.i("info", "onLoadingFailed");                      

                                }

                               

                                @Override

                                public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) {

                                    Log.i("info", "onLoadingComplete");                    

                                }

                                

                                @Override

                                public void onLoadingCancelled(String arg0, View arg1) {

                                    Log.i("info", "onLoadingCancelled");                       

                                }

                            });                   

                }

            }

 

        清单文件中:

            <uses-permission android:name="android.permission.INTERNET"/>

            <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

            <application

                android:allowBackup="true"

                android:name="com.exa.imageloaderdemo.MyApplication"

                android:icon="@drawable/ic_launcher"

                android:label="@string/app_name"

                android:theme="@style/AppTheme" >

                <activity

                    android:name="com.exa.imageloaderdemo.MainActivity"

                    android:label="@string/app_name" >

                    <intent-filter>

                        <action android:name="android.intent.action.MAIN" />

 

                        <category android:name="android.intent.category.LAUNCHER" />

                    </intent-filter>

                </activity>

            </application>

 

 

 

    Picasso加载图片:

        新建一个项目PicassoDemo:

        首先在libs文件中添加picasso-2.4.0.jar包

 

        activity.xml文件中:

            <ImageView

                android:id="@+id/iv_img"

                android:layout_width="fill_parent"

                android:layout_height="wrap_content"/>

 

        在MainActivity.java源文件中:

            /**

             * 1、Picasso的几个重要方法的介绍

             *

             * 2、用Picasso加载网络图片和本地图片

             *

             */

            public class MainActivity extends Activity {

               

                private ImageView iv_img;

 

                @Override

                protected void onCreate(Bundle savedInstanceState) {

                    super.onCreate(savedInstanceState);

                    setContentView(R.layout.activity_main);

                   

                    iv_img = (ImageView) this.findViewById(R.id.iv_img);

                   

                    /*Picasso.with(this)

                            .load("http://p4.so.qhimg.com/t01fcee4bf056436009.jpg")

                            .into(iv_img);

                   

                    Picasso.with(this)

                            .load("http://p4.so.qhimg.com/t01fcee4bf056436009.jpg")

                            .resize(50, 50).into(iv_img);*/

                   

                    Picasso.with(this)

                            .load("http://p4.so.qhimg.com/t01fcee4bf056436009.jpg")

                            .error(R.drawable.ic_launcher).into(iv_img);                   

                }

            }

 

        清单文件中:

            <uses-permission android:name="android.permission.INTERNET"/>

            <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

posted @   飞牛冲天  阅读(133)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示