在启动时获取许多项目时不断出现内存不足错误

时间:2015-06-18 20:48:19

标签: java android parse-platform

我从Parse数据库中获取登录用户的喜欢。但是,当我执行查询时,我得到一个OutOfMemoryError:

java.lang.OutOfMemoryError: Failed to allocate a 78089518 byte allocation with 16777216 free bytes and 26MB until OOM
   at java.lang.String.<init>(String.java:332)
   at java.lang.String.<init>(String.java:149)
   at java.lang.String.<init>(String.java:119)
   at com.parse.ParseRESTCommand.onResponse(ParseRESTCommand.java:176)
   at com.parse.ParseRequest$3.then(ParseRequest.java:229)
   at com.parse.ParseRequest$3.then(ParseRequest.java:225)
   at bolts.Task$14.run(Task.java:796)
   at bolts.BoltsExecutors$ImmediateExecutor.execute(BoltsExecutors.java:105)
   at bolts.Task.completeAfterTask(Task.java:787)
   at bolts.Task.continueWithTask(Task.java:599)
   at bolts.Task.continueWithTask(Task.java:610)
   at bolts.Task$12.then(Task.java:702)
   at bolts.Task$12.then(Task.java:690)
   at bolts.Task$14.run(Task.java:796)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:818)

我正在做的查询如下:

    ParseQuery<Like> query = ParseQuery.getQuery(Like.class);
    query.include("user");
    query.setLimit(1000);
    query.whereEqualTo("user", ParseUser.getCurrentUser());
    query.addDescendingOrder("createdAt");

需要注意的是,如果我将此限制为100就可以了。如果限制超过600,它似乎会抛出错误。另外需要注意的是,我做了类似的调用,从Parse中取出1000个项目,完全没有问题。它似乎与这个确切的查询有关。

有没有其他人遇到过类似的问题?

2 个答案:

答案 0 :(得分:1)

恕我直言,你只是取得太多。包括&#34;用户&#34;实体可能相当大,你可以获取1000个,看起来非常错误。你必须以不同的方式做,按需获取或实现某种&#34;滚动&#34;在用户列表上。或者,您只能获取一些&#34; user&#34;对于这种特殊情况足够的属性,其余的将在以后加载。

query.include(&#34; user.Id&#34); query.include(&#34; user.avatar&#34);

答案 1 :(得分:0)

您可能正在加载对象的所有字段,可能是带有图像的BLOB字段?

您应该指定从DB查询时需要使用的字段。