Android studio, при вызове notifyDataSetChanged() в PagerAdapter компонента ViewPager не очищается память

169
01 января 2020, 03:40

Делаю приложение - мозайка из полигонов.

Пользователь пальцем вытаскивает полигон из списка и ведет к нужному месту в каркасе, при совпадении полигон в каркасе закрашивается, и удаляется из ViewPager. При закрашивании память накапливается и вылетает OutOfMemory. Используя Profiler выяснил что память накапливается при удалении полигона из ViewPagerAdapter, а именно при вызове notifyDataSetChanged(), если не вызывать notifyDataSetChanged то память очищается и не накапливается.

Удаление из PagerAdapter:

  pagerAdapter.removeView(view);

PagerAdapter:

    @Override
public int getCount() {
    return adapterPolygons.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
    return view == o;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
    LayoutInflater inflater = LayoutInflater.from(container.getContext());
    View view = load(container, inflater, position);
    return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
    container.removeView((View) object);
}
private View load(ViewGroup container, LayoutInflater inflater, int position) {
    View view = inflater.inflate(R.layout.polygon_model, container, false);
    PolygonView polygonView = view.findViewById(R.id.polygon);
    polygonView.setMathPolygon(mathPolygon);
    polygonView.setPolygon(adapterPolygons.get(position));
    manager.setListener(polygonView, adapterPolygons.get(position));
    container.addView(view);
    return view;
}
@Override
public void removeView(Object object) {
    adapterPolygons.remove(object);
    notifyDataSetChanged();
}
@Override
public float getPageWidth(int position) {
   return 0.25f;
}
@Override
public int getItemPosition(Object object) {
    return PagerAdapter.POSITION_NONE;
}

}

Как решить проблему с OutOfMemory?

READ ALSO
Как создать генерацию слов в приложении под Android?

Как создать генерацию слов в приложении под Android?

Хочу создать игру для Android что-то типа Крокодила или Шляпы, где будут генерироваться словаПодскажите, как можно организовать хранение этих...

157
Получения сущности по вторичному ключу. Hibernate

Получения сущности по вторичному ключу. Hibernate

Есть две связанные таблицы, Runner и Registration

120