Android 致命异常:main java.lang.OutOfMemoryError
当我运行我的应用程序时,我一直遇到这个错误。该应用程序将编译良好,与该应用程序的交互是正常的,直到某个时间段,它将出现OUTOFMEMORY错误消息 错误日志:Android 致命异常:main java.lang.OutOfMemoryError,android,out-of-memory,android-memory,Android,Out Of Memory,Android Memory,当我运行我的应用程序时,我一直遇到这个错误。该应用程序将编译良好,与该应用程序的交互是正常的,直到某个时间段,它将出现OUTOFMEMORY错误消息 错误日志: E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.OutOfMemoryError at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94) at ja
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)
E/AndroidRuntime﹕ 致命异常:主
java.lang.OutOfMemoryError
位于java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94)
位于java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:145)
在java.lang.StringBuilder.append中(StringBuilder.java:216)
位于org.json.JSONStringer.value(JSONStringer.java:249)
位于org.json.JSONArray.writeTo(JSONArray.java:572)
位于org.json.JSONStringer.value(JSONStringer.java:233)
位于org.json.JSONObject.writeTo(JSONObject.java:671)
位于org.json.JSONObject.toString(JSONObject.java:640)
位于com.android.volley.toolbox.JsonObjectRequest。(JsonObjectRequest.java:47)
访问com.apps.robotapp.RobotService.onStart(RobotService.java:75)
位于android.app.Service.onStartCommand(Service.java:450)
位于android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2833)
在android.app.ActivityThread.access$2000(ActivityThread.java:159)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1419)上
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:137)
位于android.app.ActivityThread.main(ActivityThread.java:5419)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:525)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1187)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
在dalvik.system.NativeStart.main(本机方法)
在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);
RequestQueue queue=Volley.newRequestQueue(this);
JsonObjectRequest jsObjRequest=新的JsonObjectRequest(Request.Method.POST,SPHERE_URL,obj,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
//System.out.println(“JsonObjectRequest:>>”+response+“”,而不进入代码。
您可以遵循ref计数和RAM消耗:
顺便说一句,您的异常日志中没有“由…”引起的吗?除了使用过多的内存外,当您泄漏内存时可能会发生这种情况。泄漏是无意中保留对不再需要的对象的引用
这种情况有很多种可能发生。最明显的一种是从不从缓存中清除旧项目。在Android中,你可以这样做,但对你来说可能不是这样
看一看关于内存的速成课程。视频中有一个指向Eclipse内存分析工具(MAT)的链接这可以帮助您放大问题。掌握这一点可能需要相当长的时间,因此您可能只想观看视频以了解内存泄漏,然后使用您的常识和应用程序的知识通过推理找到泄漏。祝您好运!哪一行是第75行?如果您仍然使用GC,则调用GC是不够的intain引用了所有内容。例如,我看到您使用调用队列。为每个对象添加。您是否也注意从该队列中弹出元素,或者它在没有控制的情况下成长?@TDG这是第75行:JsonObjectRequest jsObjRequest=new JsonObjectRequest(Request.Method.POST、SPHERE\u URL、obj、new Response.Listener()
@skypjack)那么还需要什么呢?我只大致熟悉GC方法。您需要释放一个对象,以便GC可以释放它。请参阅上面的注释,我在其中放了一个示例。