2016-03-27 11 views
2

以下のコードを使用してビットマップサイズを削減し、メモリを節約します。しかし、私がそれを使うと、消費されたRAMメモリは解放されません。解決策は何ですか?私はメソッドの下でustingの後にSystem.gc()を呼び出しましたが、影響はありません。私は私が言うことについてはよく分からない、しかし、あなたのデバイスに十分なRAMメモリがビットマップを保持している場合は、リサイクルを呼び出すときに、私が思うリサイクル後にビットマップメモリ​​RAMが解放されない

Uri selectedImageUri = data.getData(); 
       imgPath = Util.getRealPathFromURI(MainActivity.this, selectedImageUri); 
       Bitmap bitmap = BitmapFactory.decodeFile(imgPath); 
       try { 
        imgPath = Generals.App_Directory + "/temp/" + SystemClock.currentThreadTimeMillis(); 
        ImageUtil.compress_save(bitmap, imgPath, 50); 
        bitmap.recycle(); 
        System.gc(); 
        confirmDialog(); 
       } catch (IOException e) { 
        FileLogException.print(e); 
       } 
+0

大きいビットマップ(ビットマップ入力パラメータ) – pskink

+1

をリサイクルしていないのですが、誰が参照を保持しているのかを確認するのに「MAT」を使ってみましたか? – thepoosh

+0

もう一度、MATを使用してビットマップへの参照を保持している人を見てください。System.gcを呼び出すと実際にgcが発生しません – thepoosh

答えて

0

活動の結果に機能上の呼び出し

public static void compress_save(Bitmap input, String path, int dim) throws IOException { 
    FileOutputStream out = new FileOutputStream(path); 
    input = Bitmap.createScaledBitmap(input, Generals.img_width, Generals.img_height, true); 
    input.compress(Bitmap.CompressFormat.JPEG, dim, out); 

    out.flush(); 
    out.close(); 
    input.recycle(); 
} 

RAMの容量が少なくなると、ビットマップRAMメモリが解放されます。

私はこれらのコードを2つのデバイスでテストしました。ビットマップRAMメモリを解放してリサイクルした後、デバイスのメモリが不足しているときに、ビットマップRAMスペースをリサイクルした後にデバイスが多くのメモリを解放しても解放されません。

関連する問題