0
我試圖釋放內存,當我不再需要它時,但這似乎並不容易。我創建了一個包含一些圖像(位圖)的ListView。每次我這樣做,內存監視器顯示我的應用程序使用的內存增加。這就是我的做法:處理位圖時發生內存泄漏
private ArrayList<ImgMdl> populateList(){
ArrayList<ImgMdl> list = new ArrayList<>();
File folder = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + settingsFileDir + "/" + imgLogFileDir);
if(folder.exists()) {
File[] listOfFiles = folder.listFiles();
listOfFiles = sortFileList(listOfFiles);
for (int i = 0; i < listOfFiles.length; i++) {
String imgFilePath = listOfFiles[i].toString();
Bitmap bmp = BitmapFactory.decodeFile(imgFilePath);
ImgMdl imgMdl = new ImgMdl();
imgMdl.set_itm_txt(getDateString(listOfFiles[i].getName()));
imgMdl.set_itm_img(bmp);
list.add(imgMdl);
}
}
return list;
}
public class MainGate_ImgMdl {
private String itm_txt;
private Bitmap itm_img;
public String get_itm_txt() {
return itm_txt;
}
public void set_itm_txt(String itm_txt) {
this.itm_txt = itm_txt;
}
public Bitmap get_itm_img() {
return itm_img;
}
public void set_itm_img(Bitmap itm_img) {
this.itm_img = itm_img;
}
}
如果我多次打開包含該列表的活動,我會有時會發生outOfMemoryException。如果我不再需要它,我怎樣才能釋放記憶?完成()沒有幫助。
完成後,您可以回收位圖。 – Thracian
使用'Glide'庫或'Picasso'下載圖像。這些庫是爲處理圖像而製作的。 – Yupi
我用我的代碼處理圖像,從來沒有與他們的問題。你可以使用你自己的代碼來處理圖像,但是如果它們太大,你應該在加載它們之前調整它們的大小,特別是如果它們大於將要放入的容器或佈局,請不要一次將它們加載到內存中,完成後回收它們。我用這種方式開發遊戲。 – Thracian