Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 致命异常:main java.lang.OutOfMemoryError_Android_Out Of Memory_Android Memory - Fatal编程技术网

Android 致命异常:main java.lang.OutOfMemoryError

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

当我运行我的应用程序时,我一直遇到这个错误。该应用程序将编译良好,与该应用程序的交互是正常的,直到某个时间段,它将出现OUTOFMEMORY错误消息

错误日志:

 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可以释放它。请参阅上面的注释,我在其中放了一个示例。