Android 为什么在调用Volley.RequestQuery.add()时出现OutOfMemory异常?
当我删除requestQuery.add()行时,除了没有网络数据外,其他都可以正常工作。在添加requestQuery.add()之后-我得到以下结果: 回溯:Android 为什么在调用Volley.RequestQuery.add()时出现OutOfMemory异常?,android,android-volley,Android,Android Volley,当我删除requestQuery.add()行时,除了没有网络数据外,其他都可以正常工作。在添加requestQuery.add()之后-我得到以下结果: 回溯: 08-29 18:15:53.071 6305-7075/? E/dalvikvm-heap﹕ Out of memory on a 840969348-byte allocation. 08-29 18:15:53.141 6305-7075/? E/AndroidRuntime﹕ FATAL EXCEPTION
08-29 18:15:53.071 6305-7075/? E/dalvikvm-heap﹕ Out of memory on a 840969348-byte allocation.
08-29 18:15:53.141 6305-7075/? E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-27227
java.lang.OutOfMemoryError
at com.android.volley.toolbox.DiskBasedCache.streamToBytes(DiskBasedCache.java:322)
at com.android.volley.toolbox.DiskBasedCache.readString(DiskBasedCache.java:540)
at com.android.volley.toolbox.DiskBasedCache.readStringStringMap(DiskBasedCache.java:562)
at com.android.volley.toolbox.DiskBasedCache$CacheHeader.readHeader(DiskBasedCache.java:403)
at com.android.volley.toolbox.DiskBasedCache.initialize(DiskBasedCache.java:156)
at com.android.volley.CacheDispatcher.run(CacheDispatcher.java:84)
以下是我的代码:
public class DataReceiver {
public static void initializeCountriesListUpdate(String urlString, final Context context) throws IOException {
RequestQueue requestQueue = Volley.newRequestQueue(context);
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, urlString,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
ArrayList<Country> countriesList = JsonParser.getCountriesFromJson(response, context);
((CountriesListActivity)context).updateCountriesList(countriesList);
((CountriesListActivity)context).progressDialog.hide();
((CountriesListActivity)context).progressDialog.dismiss();
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("NetworkManager", "Cannot resolve data from the server");
}
});
VolleySingleton.getInstance().getRequestQueue().add(jsonObjectRequest);
}
位图通常会导致outofmemory错误。 尝试忽略位图加载,以测试这是否是问题所在。
检查那里的大小,可能使用此处描述的calculateInSampleSize我怀疑您的主要问题是内存异常,并且作为一个副作用,您在获得OutOfMemoryError异常(这是“泄露了最初添加到此处的window com.android.internal.policy.impl.PhoneWindow$DecorView{41dbc578 V.E.…R…D 0,0-684192}”部分) 正如主要的例外情况所表明的,您的缓存可能比堆大,并且来自服务器的响应非常大,您应该集中精力解决这个问题
我认为这可能有助于您解决此问题。您分析了堆转储吗?我的问题是缺少缓存。感谢Udi提供的链接提示。本手册帮助我更正了。我的singleton:
android:hardwareAccelerated="false"
android:largeHeap="true"