2013-11-25 55 views
1

我寫一個函數,即保存文件到外部存儲:保存文件在主界面

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(); 
} 

爲什麼不機器人警告我,說我使用的文件系統主界面。 這是正確的方式還是我需要使用asynctask?

回答

3

作爲每developer.android.com

*

的BitmapFactory.decode *方法,在負載大的位圖 高效教訓,不應該在主UI線程上如果 源數據是執行所討論從磁盤或網絡位置(或者除內存以外的任何其他源)讀取。此數據加載所需的時間爲 不可預知,並取決於各種因素(從磁盤或網絡讀取的速度爲 ,圖像大小,CPU功率等)。如果其中一個 這些任務阻塞UI線程,則系統會將您的應用程序標記爲 無響應,並且用戶可以選擇關閉它(請參閱 設計響應能力以獲取更多信息)。

*

所以它提示的那樣是你不應該寫文件到外部存儲設備阻塞主UI線程。並且強烈建議您使用AsyncTask

1

你可以創建類似的東西。但是我建議你在AsyncTask中創建和寫入文件,因爲如果文件中有太多數據要寫入,它將花費你很多秒的時間,在這段時間內,用戶將無法對你的應用程序做任何事情因爲主線程(UI線程)用於寫入。現在取決於你如何設計你的應用程序。也許你不想在創建文件時讓用戶做其他任何事情,但即使如此,我還是會說你可以在AsyncTask中完成寫作,寫作完成後,你可以顯示一個加載gif或其他東西通知用戶正在進行保存。