内存不足的问题,凌空的磁盘缓存 [英] out of memory issue with volley's disk cache

查看:224
本文介绍了内存不足的问题,凌空的磁盘缓存的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序为Android我使用凌空自定义列表视图加载图像。

当我刷新(删除所有项目,并加载TIEMS)的ListView很多次, 我的应用程序被杀害此消息

我该如何解决?

  

04-26 13:08:01.038:E / dalvikvm堆(18040):内存在1684947261字节分配。   04-26 13:08:01.038:I / dalvikvm(18040):线程11094PRIO = 5 TID = 299 RUNNABLE   04-26 13:08:01.038:I / dalvikvm(18040):|组=主SCOUNT = 0 dsCount = 0的obj = 0x439ea8e8自我= 0x7fb55250   04-26 13:08:01.038:I / dalvikvm(18040):| sysTid = 18946漂亮= 10 sched的= 0/0 CGRP =应用程序/ bg_non_interactive手柄= 2102160344   04-26 13:08:01.038:I / dalvikvm(18040):|状态= R schedstat =(109248225 27367764 57)UTM = 9 STM = 1核心= 2   04-26 13:08:01.038:I / dalvikvm(18040):在com.android.volley.toolbox.DiskBasedCache.streamToBytes(DiskBasedCache.java:~316)   04-26 13:08:01.038:I / dalvikvm(18040):在com.android.volley.toolbox.DiskBasedCache.readString(DiskBasedCache.java:526)   04-26 13:08:01.038:I / dalvikvm(18040):在com.android.volley.toolbox.DiskBasedCache.readStringStringMap(DiskBasedCache.java:549)   04-26 13:08:01.038:I / dalvikvm(18040):在com.android.volley.toolbox.DiskBasedCache $ CacheHeader.readHeader(DiskBasedCache.java:392)   04-26 13:08:01.038:I / dalvikvm(18040):在com.android.volley.toolbox.DiskBasedCache.initialize(DiskBasedCache.java:155)   04-26 13:08:01.038:I / dalvikvm(18040):在com.android.volley.CacheDispatcher.run(CacheDispatcher.java:84)   04-26 13:08:01.048:W / dalvikvm(18040):主题ID = 299:线程退出与未捕获的异常(组= 0x41745da0)   04-26 13:08:01.048:I / SpenGestureManager(847):setFocusWindow0   04-26 13:08:01.048:D / PointerIcon(847):setHoveringSpenIconStyle1 pointerType:10001iconType:1的标志:0   04-26 13:08:01.048:D / PointerIcon(847):setHoveringSpenCustomIcon IconType是same.1   04-26 13:08:01.048:E / AndroidRuntime(18040):致命异常:线程11094   04-26 13:08:01.048:E / AndroidRuntime(18040):工艺:com.android.myapp,PID:18040   04-26 13:08:01.048:E / AndroidRuntime(18040):java.lang.OutOfMemoryError   04-26 13:08:01.048:E / AndroidRuntime(18040):在com.android.volley.toolbox.DiskBasedCache.streamToBytes(DiskBasedCache.java:316)   04-26 13:08:01.048:E / AndroidRuntime(18040):在com.android.volley.toolbox.DiskBasedCache.readString(DiskBasedCache.java:526)   04-26 13:08:01.048:E / AndroidRuntime(18040):在com.android.volley.toolbox.DiskBasedCache.readStringStringMap(DiskBasedCache.java:549)   04-26 13:08:01.048:E / AndroidRuntime(18040):在com.android.volley.toolbox.DiskBasedCache $ CacheHeader.readHeader(DiskBasedCache.java:392)   04-26 13:08:01.048:E / AndroidRuntime(18040):在com.android.volley.toolbox.DiskBasedCache.initialize(DiskBasedCache.java:155)   04-26 13:08:01.048:E / AndroidRuntime(18040):在com.android.volley.CacheDispatcher.run(CacheDispatcher.java:84)   04-26 13:08:01.058:W / ActivityManager(847):强制完成活动com.android.myapp / .feedlist.Feedlist

解决方案

我在和加载图像非常相似的问题变成一个ListView。看来你要处理来自自己的高速缓存拉动。

下面是我的实现,我有我的公开查看getView(INT位置,查看convertView,ViewGroup中父)适配器方式:

 位图cachedBitmap = imageCache.getBitmap(item.getPhotoUrl());
如果(cachedBitmap!= NULL)
{
    holder.photo.setImageBitmap(cachedBitmap);
}
其他 {
    ImageLoader的ImageLoader的=新ImageLoader的(Volley.newRequestQueue(this.context),imageCache);
    imageLoader.get(item.getPhotoUrl(),新ImageLoader.ImageListener(){
        @覆盖
        公共无效onResponse(ImageLoader.ImageContainer响应,布尔isImmediate){
            如果(item.getPhotoUrl()= NULL和放大器;!&安培;!response.getBitmap()= NULL)
                imageCache.putBitmap(item.getPhotoUrl(),response.getBitmap());
        }

        @覆盖
        公共无效onErrorResponse(VolleyError错误){
            error.printStackTrace();
        }
    });

    //这是一个自定义ImageView的,你可以创建自己的实现加载图像URL到的ImageView
    holder.photo.setImageUrl(item.getPhotoUrl(),ImageLoader的);
}
 

In my app for Android I'm using Volley for loading images in custom listview.

when i refresh(delete all items and load tiems) listview many times, my app is killed with this message

how can i fix it?

04-26 13:08:01.038: E/dalvikvm-heap(18040): Out of memory on a 1684947261-byte allocation. 04-26 13:08:01.038: I/dalvikvm(18040): "Thread-11094" prio=5 tid=299 RUNNABLE 04-26 13:08:01.038: I/dalvikvm(18040): | group="main" sCount=0 dsCount=0 obj=0x439ea8e8 self=0x7fb55250 04-26 13:08:01.038: I/dalvikvm(18040): | sysTid=18946 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=2102160344 04-26 13:08:01.038: I/dalvikvm(18040): | state=R schedstat=( 109248225 27367764 57 ) utm=9 stm=1 core=2 04-26 13:08:01.038: I/dalvikvm(18040): at com.android.volley.toolbox.DiskBasedCache.streamToBytes(DiskBasedCache.java:~316) 04-26 13:08:01.038: I/dalvikvm(18040): at com.android.volley.toolbox.DiskBasedCache.readString(DiskBasedCache.java:526) 04-26 13:08:01.038: I/dalvikvm(18040): at com.android.volley.toolbox.DiskBasedCache.readStringStringMap(DiskBasedCache.java:549) 04-26 13:08:01.038: I/dalvikvm(18040): at com.android.volley.toolbox.DiskBasedCache$CacheHeader.readHeader(DiskBasedCache.java:392) 04-26 13:08:01.038: I/dalvikvm(18040): at com.android.volley.toolbox.DiskBasedCache.initialize(DiskBasedCache.java:155) 04-26 13:08:01.038: I/dalvikvm(18040): at com.android.volley.CacheDispatcher.run(CacheDispatcher.java:84) 04-26 13:08:01.048: W/dalvikvm(18040): threadid=299: thread exiting with uncaught exception (group=0x41745da0) 04-26 13:08:01.048: I/SpenGestureManager(847): setFocusWindow0 04-26 13:08:01.048: D/PointerIcon(847): setHoveringSpenIconStyle1 pointerType: 10001iconType:1 flag:0 04-26 13:08:01.048: D/PointerIcon(847): setHoveringSpenCustomIcon IconType is same.1 04-26 13:08:01.048: E/AndroidRuntime(18040): FATAL EXCEPTION: Thread-11094 04-26 13:08:01.048: E/AndroidRuntime(18040): Process: com.android.myapp, PID: 18040 04-26 13:08:01.048: E/AndroidRuntime(18040): java.lang.OutOfMemoryError 04-26 13:08:01.048: E/AndroidRuntime(18040): at com.android.volley.toolbox.DiskBasedCache.streamToBytes(DiskBasedCache.java:316) 04-26 13:08:01.048: E/AndroidRuntime(18040): at com.android.volley.toolbox.DiskBasedCache.readString(DiskBasedCache.java:526) 04-26 13:08:01.048: E/AndroidRuntime(18040): at com.android.volley.toolbox.DiskBasedCache.readStringStringMap(DiskBasedCache.java:549) 04-26 13:08:01.048: E/AndroidRuntime(18040): at com.android.volley.toolbox.DiskBasedCache$CacheHeader.readHeader(DiskBasedCache.java:392) 04-26 13:08:01.048: E/AndroidRuntime(18040): at com.android.volley.toolbox.DiskBasedCache.initialize(DiskBasedCache.java:155) 04-26 13:08:01.048: E/AndroidRuntime(18040): at com.android.volley.CacheDispatcher.run(CacheDispatcher.java:84) 04-26 13:08:01.058: W/ActivityManager(847): Force finishing activity com.android.myapp/.feedlist.Feedlist

解决方案

I was having a very similar issue with loading images into a ListView. It seems you have to handle pulling from the cache yourself.

Below is my implementation which I have in my public View getView(int position, View convertView, ViewGroup parent) adapter method:

Bitmap cachedBitmap = imageCache.getBitmap(item.getPhotoUrl());
if (cachedBitmap != null)
{
    holder.photo.setImageBitmap(cachedBitmap);
}
else {
    ImageLoader imageLoader = new ImageLoader(Volley.newRequestQueue(this.context), imageCache);
    imageLoader.get(item.getPhotoUrl(), new ImageLoader.ImageListener() {
        @Override
        public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
            if (item.getPhotoUrl() != null && response.getBitmap() != null)
                imageCache.putBitmap(item.getPhotoUrl(), response.getBitmap());
        }

        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    });

    //This is a custom imageview, you can create your own implementation for loading the image url to the imageview
    holder.photo.setImageUrl(item.getPhotoUrl(), imageLoader);
}

这篇关于内存不足的问题,凌空的磁盘缓存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆