Android 如何下载位图并保存到SD卡而不耗尽内存?
我正在寻找下载一系列位图的最佳方法,对它们稍加修改,然后保存到SD卡 我听说使用Android 如何下载位图并保存到SD卡而不耗尽内存?,android,download,bitmap,android-3.0-honeycomb,bufferedinputstream,Android,Download,Bitmap,Android 3.0 Honeycomb,Bufferedinputstream,我正在寻找下载一系列位图的最佳方法,对它们稍加修改,然后保存到SD卡 我听说使用ByteArrayOutputStream是个坏主意,因为它会将图像加载到设备的RAM中。相反,我可能应该使用类似于BufferedInputStream和FileOutputStream的东西,但是我不知道如何在使用此方法保存位图之前更改它们 谢谢您可以使用以下方法从输入流创建位图: Bitmap bm = BitmapFactory.decodeStream(inputStream); 然后,在处理并存储了位图
ByteArrayOutputStream
是个坏主意,因为它会将图像加载到设备的RAM中。相反,我可能应该使用类似于BufferedInputStream
和FileOutputStream
的东西,但是我不知道如何在使用此方法保存位图之前更改它们
谢谢您可以使用以下方法从
输入流创建位图:
Bitmap bm = BitmapFactory.decodeStream(inputStream);
然后,在处理并存储了位图后,必须使用:
bm.recycle();
bm = null;
要避免outofmemory异常
编辑:
要将其写入文件,请执行以下操作:
OutputStream fos=new BufferedOutputStream(new FileOutputStream(filePath));
byte buf[]=new byte[1024];
int len;
while((len=is.read(buf))>0)
fos.write(buf,0,len);
fos.close();
is.close();
你不会喜欢这个答案:你不能(至少在Android框架下是这样)
唯一的选择是把它放在内存中;并定期调用recycle()
和System.gc()
以尽快释放内存。是的,谢谢,我知道,但是如何在不使用ByteArrayOutputStream的情况下将位图写入SD卡上的文件?谢谢-但是您的代码直接从输入流而不是位图读取:(是的,这正是我所担心的。我想我可以做的是使用BufferedInputStream下载图像,然后再进行位图操作。这不是世界上最好的事情,但幸运的是我使用AsyncTask下载图像,所以我可以在onPostExecute()方法中进行位图操作。非常感谢:)还有另一个建议:使用IntentService
而不是AsyncTask
来执行长时间运行的任务(下载、图像处理)(请参阅)