【发布时间】:2015-10-16 05:55:05
【问题描述】:
我收到 java.lang.OutOfMemoryError 错误,并在运行应用程序以从服务器下载多个图像并存储到 SD 卡时使应用程序崩溃。我对 gradle.properties 进行了一些更改并更改行 # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=1024m -XX:MaxHeapSize\=1024m -XX:+HeapDumpOnOutOfMemoryError -Xmx1024m -Dfile.encoding=UTF-8。并尝试调用 System.gc(); 。但一次又一次地得到同样的错误。如何解决这个问题。提前致谢。
这是我的代码
这一行的错误imagenObtenida = BitmapFactory.decodeStream(conn.getInputStream(), null, options);
Log.e("fileUrl ", " = " + fileUrl + " ImageName = " + ImageName);
URL ImgUrl = new URL(fileUrl);
HttpURLConnection conn = (HttpURLConnection) ImgUrl.openConnection();
conn.connect();
int lenghtOfImage_File = conn.getContentLength();
Log.e("lenghtOfImage_File ", " = " + lenghtOfImage_File);
System.gc();
if(imagenObtenida != null)
{
imagenObtenida.recycle();
imagenObtenida = null;
}
BitmapFactory.Options options = new BitmapFactory.Options();
options.inTempStorage = new byte[16*1024];
options.inPurgeable = true;
options.inSampleSize = 1;
imagenObtenida = BitmapFactory.decodeStream(conn.getInputStream(), null, options);
newFolder = new File(Environment.getExternalStorageDirectory().getPath() + File.separator + "classnkk_images");
File file = new File(newFolder, ImageName);
这是我的日志错误
10-16 11:16:20.978 1135-1152/? E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:278)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:493)
at com.example.tazeen.classnkk.AllPosts_Page.download_PngFile(AllPosts_Page.java:1128)
at com.example.tazeen.classnkk.AllPosts_Page.getDoenLoaddata(AllPosts_Page.java:735)
at com.example.tazeen.classnkk.AllPosts_Page$GetgetDoenLoaddata.doInBackground(AllPosts_Page.java:705)
at com.example.tazeen.classnkk.AllPosts_Page$GetgetDoenLoaddata.doInBackground(AllPosts_Page.java:701)
at android.os.AsyncTask$2.call(AsyncTask.java:264)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
【问题讨论】:
-
最好使用
Glide或Fresco库从服务器加载多个图像。 -
这意味着您正在下载太多或太大的图像。请确保只下载您需要且分辨率合适的图片。
-
我从服务器下载了太多太大的图片。
-
@androidTag 大图像会产生问题
标签: android