Android 截击时内存不足问题';磁盘缓存

Android 截击时内存不足问题';磁盘缓存,android,caching,memory,android-volley,Android,Caching,Memory,Android Volley,在我的Android应用程序中,我使用截击在自定义列表视图中加载图像 当我多次刷新(删除所有项目并加载分层)listview时, 我的应用程序被此消息终止 我怎样才能修好它 04-26 13:08:01.038:E/dalvikvm堆(18040):1684947261字节分配内存不足。 04-26 13:08:01.038:I/dalvikvm(18040):“线程-11094”优先级=5 tid=299可运行 04-26 13:08:01.038:I/dalvikvm(18040):| gr

在我的Android应用程序中,我使用截击在自定义列表视图中加载图像

当我多次刷新(删除所有项目并加载分层)listview时, 我的应用程序被此消息终止

我怎样才能修好它

04-26 13:08:01.038:E/dalvikvm堆(18040):1684947261字节分配内存不足。 04-26 13:08:01.038:I/dalvikvm(18040):“线程-11094”优先级=5 tid=299可运行 04-26 13:08:01.038:I/dalvikvm(18040):| group=“main”scont=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_非交互式句柄=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):位于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):threadid=299:线程以未捕获异常退出(组=0x41745da0) 04-26 13:08:01.048:I/SpenGestureManager(847):设置焦点窗口0 04-26 13:08:01.048:D/PointerIcon(847):设置悬停PeniconStyle1指针类型:10001连续类型:1标志:0 04-26 13:08:01.048:D/PointerIcon(847):设置悬停铅笔图标类型相同。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

你试过了吗

RequestQueue volleyQueue = Volley.newRequestQueue(this);
DiskBasedCache cache = new DiskBasedCache(getCacheDir(), 16 * 1024 * 1024);
volleyQueue = new RequestQueue(cache, new BasicNetwork(new HurlStack()));
volleyQueue.start();


这会改变缓存大小

我在将图像加载到ListView时遇到了非常类似的问题。看来你得自己处理从缓存中提取的问题

下面是我在我的
公共视图getView(int-position,View-convertView,ViewGroup-parent)
适配器方法中的实现:

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);
}

有什么解决办法吗?这个问题已经有2年了,但我仍在寻找解决办法。答案很相似,但对我来说并不适用。你有没有想过?