###環境
AndroidStudio2.3.3
SDK 7.1.1
API 25
###前提・実現したいことと問題
端末のカメラを使用して撮影した画像を内部ストレージorSDカードに保存するという
一連の処理を作っているのですが、
撮影→画像を保存→撮影→画像を保存・・・・という
ループ処理内で記述しているコードが原因でメモリリークを起こしています。
どう改善すればいいのか分かりません。
問題となっている処理の内容としては、
「保存先がSDカードに設定されているときはSDカードにアクセスできるかと空き容量をチェックするというものです。」
###該当のソースコード
java
1 2if (Setting.gsSaveDestination.equals("1")) { 3 4// microSDカードにアクセスできるか確認とmicroSDカードの空容量を取得 5 6 7 8 9long SDUsableSizeBytes = 0; 10File fOutTest = null; 11FileOutputStream fOutStream = null; 12Boolean bSDFlg = false; 13 14try { 15 16// SDカード自パッケージ内のパス(本来はOnCreate();時にSDのパスを取得して変数で持っています) 17fOutTest = new File(/storage/<SDカードのUUID>/Android/data/<パッケージ名>/files); 18 19if (fOutTest.exists()) { 20 21SDUsableSizeBytes = fOutTest.getUsableSpace(); 22 23 24 25fOutTest = new File(/storage/<SDカードのUUID>/Android/data/<パッケージ名>/files+ "test.txt"); 26 27fOutStream = new FileOutputStream(fOutTest, false); 28 bSDFlg = true; 29} 30 31} catch (FileNotFoundException e) { 32 33ログ出力(e.getMessage()); 34 35} catch (Exception e) { 36 37ログ出力(e.getMessage()); 38 39} finally { 40 41if (fOutStream != null) { 42 43fOutStream.close(); 44} 45 46if (fOutTest.isFile() && fOutTest.exists()) { 47 48fOutTest.delete(); 49} 50} 51 52if (!bSDFlg) { 53 54if (mbWriteSdCardStopLog == false) { 55 56mbWriteSdCardStopLog = true; 57 58ログ出力("microSD card is not installed, recording stopped"); 59} 60return; 61} 62 63 64 65// 空容量チェック 66double SDUsableSizeGB = SDUsableSizeBytes / 1024 / 1024 / 1024; 67 68if (SDUsableSizeGB <= 0.1) { 69 70 if (mbWriteSdCardStopLog == false) { 71 72mbWriteSdCardStopLog = true; 73 74ログ出力("microSD card is free space under 100MB, recording stopped)"); 75} 76 77return; 78} else { 79if (mbWriteSdCardStopLog == true) { 80 81mbWriteSdCardStopLog = false; 82 83ログ出力("microSD card is free space over 100MB, recording re-started)"); 84} 85} 86}
### 見る限りだとFileオブジェクトはnewでインスタンスを作っていますし、 変数もStaticのものは使っていないので何が原因か分かりません。 以前のAndroidバージョン(5.1)では起きなかった現象なだけあって尚更困惑しています。 拙い説明や質問だと思いますがどうぞよろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。