我编写了一个将文件保存到外部存储器的函数:
public void saveBmp(Bitmap bmp) {
File f = new File(Environment.getExternalStorageDirectory(), "test.jpg");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(f);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
bmp.compress(CompressFormat.JPEG, 70, fos);
try {
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
bmp.recycle();
}
为什么android没有警告我,我在主UI中使用文件系统。 是正确的方式还是我需要使用asynctask?
答案 0 :(得分:3)
*
BitmapFactory.decode *方法,在Load Large Bitmaps中讨论 有效的教训,不应该在主UI线程上执行if 源数据是从磁盘或网络位置(或实际上是任何一个)读取的 内存以外的来源)。此数据加载的时间是 不可预测,取决于各种因素(阅读速度 来自磁盘或网络,图像大小,CPU功率等)。如果其中之一 这些任务会阻止UI线程,系统会将您的应用程序标记为 没有响应,用户可以选择关闭它(参见 设计响应更多信息)。
*
所以它的建议是你不应该通过将文件写入外部存储来阻止主UI线程。 强烈建议您使用AsyncTask
答案 1 :(得分:1)
您可以创建类似的东西。但我建议你在AsyncTask中创建和写入文件,因为如果在文件中写入太多数据会花费你很多秒,在这几秒钟内用户将无法对你的应用做任何事情因为主线程(UI线程)用于写入。现在,这取决于您的应用程序设计方式。也许你不想让用户在创建文件时做任何其他事情,但即便如此我也会说你可以在AsyncTask中进行写作,而在写完之后你可以显示一个加载gif,或者其他东西通知用户正在进行保存。