致命异常:主要是java.lang.OutOfMemoryError

时间:2015-07-15 07:12:19

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

运行我的应用时,我一直收到此错误消息。该应用程序将编译正常,与应用程序的交互是正常的,直到一段时间它将出现OUTOFMEMORY错误消息。

错误Logcat:

 E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.OutOfMemoryError
        at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94)
        at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:145)
        at java.lang.StringBuilder.append(StringBuilder.java:216)
        at org.json.JSONStringer.value(JSONStringer.java:249)
        at org.json.JSONArray.writeTo(JSONArray.java:572)
        at org.json.JSONStringer.value(JSONStringer.java:233)
        at org.json.JSONObject.writeTo(JSONObject.java:671)
        at org.json.JSONObject.toString(JSONObject.java:640)
        at com.android.volley.toolbox.JsonObjectRequest.<init>(JsonObjectRequest.java:47)
        at com.apps.robotapp.RobotService.onStart(RobotService.java:75)
        at android.app.Service.onStartCommand(Service.java:450)
        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2833)
        at android.app.ActivityThread.access$2000(ActivityThread.java:159)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1419)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5419)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:525)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
        at dalvik.system.NativeStart.main(Native Method)

At Java:75(RobotService:onStart)发生错误:

RequestQueue queue = Volley.newRequestQueue(this);    
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,SPHERE_URL,obj,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    //System.out.println("JsonObjectRequest:>>" + response + "<<");
                    System.out.println(response);
                    //hideProgressDialog();
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    //hideProgressDialog();
                    Runtime.getRuntime().gc();
                }
            }); queue.add(jsObjRequest);

我已将system.gc()和Runtime.getRuntime()。gc()实现到我的实现中,但它仍然无法正常工作。

知道我该如何解决这个问题?感谢

2 个答案:

答案 0 :(得分:0)

没有进入代码。 您可以遵循引用计数和RAM消耗: http://developer.android.com/tools/debugging/debugging-memory.html

顺便说一下。你没有&#34;由...引起的&#34;在异常日志中?

答案 1 :(得分:0)

除了使用过多的内存外,当泄漏内存时会发生这种情况。泄漏无意中保留了对您不再需要的对象的引用。

有很多方法可以实现。最明显的一个是永远不会从缓存中清除旧项目。在Android中,您可以拥有Context related memory leaks,但对您而言可能并非如此。

查看Google I/O 2011: Memory Management for Android Apps内存速成课程。在视频中有一个Eclipse内存分析工具(MAT)的链接,它可以帮助您放大问题。掌握这个可能需要相当长的时间,因此您可能只是想观看视频以了解内存泄漏,然后使用您的常识和应用知识通过推理找到泄漏。祝你好运!