我编写了一个函数,将文件保存到外部存储中:
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?
最佳答案
根据developer.android.com
*
在加载大型位图中讨论的BitmapFactory.decode *方法
有效的课程,如果在以下情况下不应在主UI线程上执行
从磁盘或网络位置(或实际上任何位置)读取源数据
来源(而非内存)。该数据加载所需的时间为
不可预测,取决于多种因素(阅读速度
磁盘或网络,映像大小,CPU的功率等)。如果其中之一
这些任务会阻塞UI线程,系统会将您的应用程序标记为
无响应,用户可以选择关闭它(请参阅
有关更多信息的响应性设计)。
*
因此,建议您不要通过将文件写入外部存储来阻塞主UI线程。强烈建议您使用AsyncTask