Obrazy są ładowane do widoku siatki z serwera. Do tego używam programu Universal Image loader. Używam programu ładującego obrazy w metodzie getview() adaptera. Bierze adres URL obrazu z tablicy array & ładuje obraz z serwera. Obrazy mogą być w 100-tych. Wyświetlam widok siatki w fragmencie, więc dla każdego fragmentu istnieje osobny widok siatki. Kiedy przełączam się między wieloma fragmentami przez długi czas, nie mam już problemu z brakiem pamięci.Jak zwolnić pamięć bitmapy za pomocą mechanizmu imageloader w systemie Android?
Proponowane rozwiązanie:
- Release niewykorzystanej bitmapy.
Dlatego ładuję obrazy przy użyciu biblioteki innej firmy. Właśnie przekazuję widok obrazu w funkcji wywołującej, więc jak mogę zwolnić bitmapę?
- Producent kupa duża prawda w jawnym
Chyba pamięci sterty jest dynamiczna & ilekroć jest zwiększenie pamięci garbage collector będzie zwolnić pamięć.
3.Use UIL/Picassa/przesuwaj uniknąć pamięci przecieki
4.Code zwolnić pamięć onDestroy fragment()() w
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();
}
}
ja już z trzecią biblioteka imprezowa.
Oto kod dla mojej klasy 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;
}
}
Na której wersji Androida uruchamiasz aplikację? – TechGuy
@TechGuy andorid kitkat – Techiee
Słyszałem, że zarządzanie pamięcią jest różne w każdej wersji Androida. i użyj buforowania obrazu dla wydajności. – Hogun