问题描述
java.lang.OutOfMemoryError: Failed to allocate a 1465140570 byte allocation with 1622964 free bytes and 509MB until OOM
at com.android.volley.toolbox.DiskBasedCache.streamToBytes(DiskBasedCache.java:316)
at com.android.volley.toolbox.DiskBasedCache.readString(DiskBasedCache.java:526)
at com.android.volley.toolbox.DiskBasedCache.readStringStringMap(DiskBasedCache.java:548)
at com.android.volley.toolbox.DiskBasedCache$CacheHeader.readHeader(DiskBasedCache.java:392)
at com.android.volley.toolbox.DiskBasedCache.initialize(DiskBasedCache.java:155)
at com.android.volley.CacheDispatcher.run(CacheDispatcher.java:85)
推荐答案
我发现了此帮助,我正在测试完成后,我会来这里写作,如果它能奏效
I found this help, I'm testing It, when I finish, I will come here to write if It works
好吧,我以无限的周期对其进行了测试
Well I tested It with an infinite cycle
像这样
//global var
Boolean running = true;
Thread MyThread = new Thread(){//create thread
@Override
public void run() {
RequestQueue queue = Volley.newRequestQueue(MyActivity.this);// start one time no more...
String url = "http://192.168.1.78/testget.php?key=123456789"; // my URL
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {//where request return ...
@Override
public void onResponse(String response) {
System.out.println("Volley response: \"" + response +"\"");
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
System.out.println("There is an error: "+error.getMessage()); // on error, ex: URL bad... internet down, etc..
}
});
stringRequest.setShouldCache(false);// no caching url...
stringRequest.setRetryPolicy(
new DefaultRetryPolicy(
20000,//time to wait for it in this case 20s
20,//tries in case of error
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT
)
);
int i=0;
while(running){
System.out.println("counter: "+i);
i++;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
//e.printStackTrace();
System.out.println("Sleep interrupted");
}
// Add the request to the RequestQueue.
queue.add(stringRequest);
}
System.out.println("onEnd Thread");
}
};
MyThread.start(); // start thread
//in some button declare
running=false;
我测试了 130144次 〜18.07 hr,没有任何错误
I tested it 130144 times ~ 18.07 hr, without any error
System.out: Counter: 130141
System.out: Volley response: "something"
System.out: Counter: 130142
System.out: Volley response: "something"
System.out: Counter: 130143
System.out: Volley response: "something"
System.out: Counter: 130144
呼叫newRequestQueue
多次出现错误
使用RequestQueue queue = Volley.newRequestQueue(MyActivity.this);
调用多次进行测试
Getting Error with call newRequestQueue
more than one time
Test with RequestQueue queue = Volley.newRequestQueue(MyActivity.this);
calling more than one time
示例:
//global var
Boolean running = true;
Thread MyThread = new Thread(){//create thread
void getSomethingFromSite(){
RequestQueue queue = Volley.newRequestQueue(MyActivity.this);//calling request more than one time... error you not call more than one time
String url = "http://192.168.1.78/testget.php?key=123456789"; // my url
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {//where request return ...
@Override
public void onResponse(String response) {
System.out.println("Volley response: \"" + response +"\"");
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
System.out.println("There is an error: "+error.getMessage()); // on error, ex: URL bad... internet down, etc..
}
});
stringRequest.setShouldCache(false);// no caching url...
stringRequest.setRetryPolicy(
new DefaultRetryPolicy(
20000,//time to wait for it in this case 20s
20,//tries in case of error
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT
)
);
// Add the request to the RequestQueue.
queue.add(stringRequest);
}
@Override
public void run() {
int i=0;
while(running){
System.out.println("counter: "+i);
i++;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
//e.printStackTrace();
System.out.println("Sleep interrupted");
}
//call volley
getSomethingFromSite();
}
System.out.println("onEnd Thread");
}
};
MyThread.start(); // start thread
//in some button declare
running false;
错误475次
I/System.out: Counter: 471
I/System.out: Volley response: "Something"
W/libc: pthread_create failed: couldn't allocate 1064960-byte stack: Out of memory
E/art: Throwing OutOfMemoryError "pthread_create (1040KB stack) failed: Try again"
--------- beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: Thread-373
Process: com.masm.testservice, PID: 3821
java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Try again
at java.lang.Thread.nativeCreate(Native Method)
at java.lang.Thread.start(Thread.java:1063)
at com.android.volley.RequestQueue.start(RequestQueue.java:152)
at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:66)
at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:78)
at com.masm.testservice.MyService$1.getDataVolley(MyService.java:84)
at com.masm.testservice.MyService$1.run(MyService.java:129)
E/AndroidRuntime: Error reporting crash
java.lang.OutOfMemoryError
at android.os.Parcel.nativeWriteString(Native Method)
at android.os.Parcel.writeString(Parcel.java:536)
at android.app.ApplicationErrorReport$CrashInfo.writeToParcel(ApplicationErrorReport.java:389)
at android.app.ActivityManagerProxy.handleApplicationCrash(ActivityManagerNative.java:4099)
at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:89)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
结论
您最多不会拨打newRequestQueue
电话...您将收到错误out memory
或OOM
错误.
Conclusion
You do not call newRequestQueue
more than one time...you will get error of out memory
or OOM
error.
更多参考或信息链接:
1.- 使用排球库时出现内存不足错误
2.- 在我发出大量具有大量数据的请求后,凌空给我内存不足异常
3.- 排球速度太慢,导致内存泄漏
4.- Volley framewok请求将对象保留在内存中
More links for reference or information:
1.- Out of memory error when use volley library
2.- Volley give me Out of memory exception after I make a lot of request with big amount of data
3.- Volley slow and causing memory leak
4.- Volley framewok request keeps objects in memory
这篇关于排球库内存不足错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!