我將圖像從服務器加載到網格視圖中。爲此,我使用通用圖像加載器。我在適配器的getview()方法內使用圖像加載器。它需要來自arraylist &的圖像的URL從服務器加載圖像。圖像可以在100年代。我在一個片段中顯示網格視圖,因此每個片段都有一個單獨的網格視圖。當我長時間在多個片段之間切換時,我不再發生內存不足錯誤。如何在Android中使用imageloader釋放內存位圖?
建議的解決方案:
- 釋放未使用的位圖。
因此,我使用第三方庫加載圖像。我只是在調用函數中傳遞圖像視圖,所以如何釋放位圖?
- 製作堆大真清單中
我想堆存儲器是動態&每當有增加存儲器垃圾收集器將釋放內存。
3.使用UIL /畢加索/滑翔以避免內存泄漏
4.Code
private void unbindDrawables(View view)
{
if (view.getBackground() != null)
{
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup && !(view instanceof AdapterView))
{
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++)
{
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
}
}
我已經在使用的第三釋放片段的onDestroy()方法()的存儲器黨的圖書館。
這裏是我的gridViewAdapter類的代碼。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
View view = convertView;
if (view == null)
{
view = inflater.inflate(R.layout.grid_item_photo, parent, false);
holder = new ViewHolder();
holder.imageView = (ImageView) view.findViewById(R.id.imgLoader);
holder.play = (ImageView) view.findViewById(R.id.play);
view.setTag(holder);
}
else
{
holder = (ViewHolder) view.getTag();
}
try{
if(IMAGES_LIST.get(position).getType().equals("video"))
{
holder.play.setVisibility(View.VISIBLE);
}
else
{
holder.play.setVisibility(View.GONE);
}
ImageLoader.getInstance().displayImage(AppConst.BASE_IMAGE_URL+IMAGES_LIST.get(position).getThumbnail(), holder.imageView, options, new SimpleImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
view.setClickable(true);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
view.setClickable(true);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
view.setClickable(false);
}
}, new ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String imageUri, View view, int current, int total) {
}
});
}catch(Exception e)
{
}
catch(OutOfMemoryError e)
{
}
return view;
}
static class ViewHolder {
ImageView imageView,play;
}
}
在哪個Android版本上運行應用程序? – TechGuy
@TechGuy andorid kitkat – Techiee
我聽說內存管理是在每個Android版本上不同。並使用圖像緩存來提高性能。 – Hogun