Volley.newRequestQueue导致OutOfMemoryError

时间:2014-06-03 17:29:15

标签: android caching out-of-memory android-volley

我正在使用Volley来设置图片网址。我的代码崩溃在:

mrq=Volley.newRequestQueue(this);

Log cat表示豁免在:com.android.volley.toolbox.DiskBasedCache.streamToBytes

如果我注释掉代码,程序就不会崩溃。

我尝试过多次重启手机,因为在我的研究中我发现这个问题已经解决了。

为什么要使用这么多内存创建RequestQueue?

如何防止OutOfMemoryError发生?

我是否需要清空缓存?

感谢您的帮助并花时间阅读本文。

2 个答案:

答案 0 :(得分:6)

如何初始化您的RequestQueue?我怀疑您是为每个活动创建RequestQueues。所以在应用程序类中启动它作为

    public class ApplicationController extends Application {
        private static ApplicationController sInstance;
        private RequestQueue mRequestQueue;

        @Override
    public void onCreate() {
        super.onCreate();

        // initialize the singleton
        sInstance = this;
    }

 public static synchronized ApplicationController getInstance() {
        return sInstance;
    }



        public RequestQueue getRequestQueue() {
                // lazy initialize the request queue, the queue instance will be
                // created when it is accessed for the first time
                if (mRequestQueue == null) {
                    mRequestQueue = Volley.newRequestQueue(getApplicationContext());
                }

                return mRequestQueue;
            }


    //your code


    }

从您的活动中获取getRequest队列

mrq = ApplicationController.getInstance().getRequestQueue();

答案 1 :(得分:2)

一个关键概念是RequestQueue必须使用Application上下文实例化,而不是Activity上下文。这可以确保RequestQueue将持续应用的生命周期,而不是每次重新创建活动时重新创建