运行我的应用时,我一直收到此错误消息。该应用程序将编译正常,与应用程序的交互是正常的,直到一段时间它将出现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()实现到我的实现中,但它仍然无法正常工作。
知道我该如何解决这个问题?感谢
答案 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)的链接,它可以帮助您放大问题。掌握这个可能需要相当长的时间,因此您可能只是想观看视频以了解内存泄漏,然后使用您的常识和应用知识通过推理找到泄漏。祝你好运!