我正在开发一个应用程序,用户出售或购买二手物品。在我的第一个活动中,我有网格视图,在这里我显示缩略图,当用户单击图像时,它会带他进行详细的活动。我使用后退按钮返回到主活动页面。它可以正常工作,但如果我点击8-9图像并退出内存(OOM),就会崩溃。
CustomVolleyRequest类
public class CustomVolleyRequest {
private static CustomVolleyRequest customVolleyRequest;
private static Context context;
private RequestQueue requestQueue;
private ImageLoader imageLoader;
private CustomVolleyRequest(Context context) {
this.context = context;
this.requestQueue = getRequestQueue();
imageLoader = new ImageLoader(requestQueue,
new ImageLoader.ImageCache() {
private final LruCache<String, Bitmap>
cache = new LruCache<String, Bitmap>(20);
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
});
}
public static synchronized CustomVolleyRequest getInstance(Context context) {
if (customVolleyRequest == null) {
customVolleyRequest = new CustomVolleyRequest(context);
}
return customVolleyRequest;
}
public RequestQueue getRequestQueue() {
if (requestQueue == null) {
Cache cache = new DiskBasedCache(context.getCacheDir(), 10 * 1024 * 1024);
Network network = new BasicNetwork(new HurlStack());
requestQueue = new RequestQueue(cache, network);
requestQueue.start();
}
return requestQueue;
}
public ImageLoader getImageLoader() {
return imageLoader;
}
}内存监控,每次点击递增,当我返回主活动时,它会释放内存!

堆栈跟踪:
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask E/AndroidRuntime:
Process: PID: 5700
java.lang.RuntimeException: An error occured while executing
doInBackground() E/AndroidRuntime: at
android.os.AsyncTask$3.done(AsyncTask.java:300) E/AndroidRuntime: at
java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
E/AndroidRuntime: at
java.util.concurrent.FutureTask.setException(FutureTask.java:222)
E/AndroidRuntime: at
java.util.concurrent.FutureTask.run(FutureTask.java:242)
E/AndroidRuntime: at
android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
E/AndroidRuntime: at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E/AndroidRuntime: at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
E/AndroidRuntime: at java.lang.Thread.run(Thread.java:841)
E/AndroidRuntime: Caused by: java.lang.OutOfMemoryError
E/AndroidRuntime: at
android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
E/AndroidRuntime: at
android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:613)
E/AndroidRuntime: at
android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:589)
E/AndroidRuntime: at
android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:627)
E/AndroidRuntime: at
com.example.xxx.xxx.DownloadImageTask.doInBackground(DownloadImageTask.java:26)
E/AndroidRuntime: at
com.example.xxx.xxx.DownloadImageTask.doInBackground(DownloadImageTask.java:14)
E/AndroidRuntime: at
android.os.AsyncTask$2.call(AsyncTask.java:288)
E/AndroidRuntime: at
java.util.concurrent.FutureTask.run(FutureTask.java:237)
E/AndroidRuntime: at
android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
E/AndroidRuntime: at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E/AndroidRuntime: at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
E/AndroidRuntime: at java.lang.Thread.run(Thread.java:841)发布于 2016-01-12 06:34:02
根据日志,请查看这一行:
E/AndroidRuntime: Caused by: java.lang.OutOfMemoryError它清楚地说,应用程序崩溃仅仅是因为OutOfMemoryError异常。一个可能的原因可能是你正在处理大尺寸的位图而没有缩小它们。在将位图设置为图像视图之前,您需要调整其大小和缩小位图的大小。
有关如何有效管理位图的详细信息,请参阅正式的文档
https://stackoverflow.com/questions/34736674
复制相似问题