关于异步加载图片库的使用

junjun071308 2014-12-25 11:49:50
现在在用Picasso异步图片加载库加载图片,在使用上面有一点问题想请教一下大家。

Picasso加载实例是在BaseActivity里面创建一个全局实例来给每一个Activity用,统一由BaseActivity配置?

还是每个Activity里面单独自己创建,然后在Destroy的时候销毁释放?


我现在使用的是在BaseActivity里面声明一个全局的Picasso实例,同时使用了LruCache,然后每一个继承的Activity直接使用该Picasso进行图片异步加载,那么我需不需要在BaseActivity里面去关心Picasso的内存缓存释放的问题?
...全文
258 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
junjun071308 2015-01-06
  • 打赏
  • 举报
回复
引用 6 楼 lulong1985 的回复:
[quote=引用 4 楼 junjun071308 的回复:] [quote=引用 3 楼 lulong1985 的回复:] 一直在用imageloader,我觉得比较全面,楼主可以试试,维护的人也比较多,它会采用全局的配置他的config,比如线程池,缓存大小,也集成LruMemoryCache等等,比较灵活,楼主要是需要的话我可以提供给你我们项目中的使用逻辑(已经很成熟了)。Picasso很早以前用过都忘了是什么样的
十分感谢,能否提供一下相关的使用经验,比如加载实例的配置设置和一般在什么时候清理缓存 抱歉这么久才回复[/quote] https://github.com/nostra13/Android-Universal-Image-Loader 下这个就行了,里面例子实现,原理都有。[/quote] 我现在使用的是UIL ,但是还是会遇到OOM问题,所以想请教依一下,关于这个类库的使用配置需要注意哪些地方 1.ImageLoader是在MyApplication里面定义一个全局的实例好,还是每次使用的时候直接getInstance就行,又或者无所谓; 2.ImageLoader的cache一般使用什么?LruCache?WeakMemoryCache?cache的大小是多少合适? 3.有两个加载图片的Activity界面是一直存在于程序之中的,也就是说,如果程序没有退出,那么他们就不会onDestroy,最多只是OnStop,那么如何管理这样的图片缓存,需要在onStop里面去手动clear 缓存么? 以下是我的一些配置代码: 1.在MyApplication里面初始化ImageLoader的配置
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
				getApplicationContext()).memoryCacheExtraOptions(480, 480)
		// default = device screen dimensions
				.threadPoolSize(3)
				// default
				.threadPriority(Thread.NORM_PRIORITY - 1)
				// default
				.tasksProcessingOrder(QueueProcessingType.FIFO)
				.denyCacheImageMultipleSizesInMemory
				.memoryCache(new WeakMemoryCache())
				// memoryCacheSizePercentage
				.memoryCacheSizePercentage(12)
				// default
				.diskCacheSize(50 * 1024 * 1024)
				// diskCacheFileCount
				.diskCacheFileCount(100)
				// cacheFileNameGenerator
				.diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) //
				// default
				.imageDownloader(
						new BaseImageDownloader(getApplicationContext())) //
				// default
				.imageDecoder(new BaseImageDecoder(true)) // default
				// logs,delete it when release
				.writeDebugLogs()
				// build
				.build();
		ImageLoader.getInstance().init(config);
2.DisplayImageOptions的配置
DisplayImageOptions options = new DisplayImageOptions.Builder()
				.showImageOnLoading(R.drawable.default_img)
				.showImageForEmptyUri(R.drawable.default_img)
				.showImageOnFail(R.drawable.default_img)
				.resetViewBeforeLoading(false).cacheOnDisk(true)
				.cacheInMemory(true)
				.imageScaleType(ImageScaleType.IN_SAMPLE_INT)
				.bitmapConfig(Bitmap.Config.RGB_565)
				.displayer(new FadeInBitmapDisplayer(0)).build();
triplesky001 2015-01-06
  • 打赏
  • 举报
回复
引用 4 楼 junjun071308 的回复:
[quote=引用 3 楼 lulong1985 的回复:] 一直在用imageloader,我觉得比较全面,楼主可以试试,维护的人也比较多,它会采用全局的配置他的config,比如线程池,缓存大小,也集成LruMemoryCache等等,比较灵活,楼主要是需要的话我可以提供给你我们项目中的使用逻辑(已经很成熟了)。Picasso很早以前用过都忘了是什么样的
十分感谢,能否提供一下相关的使用经验,比如加载实例的配置设置和一般在什么时候清理缓存 抱歉这么久才回复[/quote] https://github.com/nostra13/Android-Universal-Image-Loader 下这个就行了,里面例子实现,原理都有。
triplesky001 2015-01-06
  • 打赏
  • 举报
回复
1,配置我是在application中做的全局的,具体实例是用mImageLoader = ImageLoader.getInstance(); 2,下面是我的配置
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
				this)
				// .memoryCacheExtraOptions(200, 200)
				// default = device screen dimensions
				// .diskCacheExtraOptions(48, 48, null)
				.threadPoolSize(3)
				// default
				.threadPriority(Thread.NORM_PRIORITY - 2)
				// default
				.tasksProcessingOrder(QueueProcessingType.FIFO)
				.memoryCache(new LruMemoryCache(4 * 1024 * 1024))
				.memoryCacheSizePercentage(10)
				// default
				// .denyCacheImageMultipleSizesInMemory()
				// .memoryCacheSize(10 * 1024 * 1024)
				// .memoryCacheSize(20)
				// default
				.discCacheExtraOptions(400, 800, null)
				.discCache(new UnlimitedDiskCache(cacheDir))
				.discCacheFileNameGenerator(new Md5FileNameGenerator())
				.discCacheSize(128 * 1024 * 1024)
				.discCacheFileCount(1000)
				.imageDownloader(
						new BaseImageDownloader(this, 5 * 1000, 30 * 1000))
				// default
				.imageDecoder(new BaseImageDecoder(true))
				.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
				.build();
		ImageLoader.getInstance().init(config);
3,我没明白你的activity的机制,你可以去跟踪一下heap看看是怎么溢出的,下面这个帖子看一下会有帮助,http://blog.csdn.net/zhiying201039/article/details/8581982
junjun071308 2015-01-05
  • 打赏
  • 举报
回复
引用 2 楼 WantD 的回复:
Imageloader 貌似比较出色,楼主可取看看
是UniversalImageLoader么还是单单就是ImageLoader,gitHub上面找的有点懵
junjun071308 2015-01-05
  • 打赏
  • 举报
回复
引用 3 楼 lulong1985 的回复:
一直在用imageloader,我觉得比较全面,楼主可以试试,维护的人也比较多,它会采用全局的配置他的config,比如线程池,缓存大小,也集成LruMemoryCache等等,比较灵活,楼主要是需要的话我可以提供给你我们项目中的使用逻辑(已经很成熟了)。Picasso很早以前用过都忘了是什么样的
十分感谢,能否提供一下相关的使用经验,比如加载实例的配置设置和一般在什么时候清理缓存 抱歉这么久才回复
triplesky001 2014-12-26
  • 打赏
  • 举报
回复
一直在用imageloader,我觉得比较全面,楼主可以试试,维护的人也比较多,它会采用全局的配置他的config,比如线程池,缓存大小,也集成LruMemoryCache等等,比较灵活,楼主要是需要的话我可以提供给你我们项目中的使用逻辑(已经很成熟了)。Picasso很早以前用过都忘了是什么样的
「已注销」 2014-12-26
  • 打赏
  • 举报
回复
Imageloader 貌似比较出色,楼主可取看看
junjun071308 2014-12-26
  • 打赏
  • 举报
回复
或者说关于Picasso的使用,是否有一个比较详细的Demo,最好是有涉及到一些它的高级用法的实例,现在在用的只有简单的load into

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧