Android 如何下载位图并保存到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); 然后,在处理并存储了位图

我正在寻找下载一系列位图的最佳方法,对它们稍加修改,然后保存到SD卡

我听说使用
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
来执行长时间运行的任务(下载、图像处理)(请参阅)