我编写了一个函数,将文件保存到外部存储中:

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

10-07 22:29