Я разрабатываю приложение, которое использует FragmentPagerAdapter для управления фрагментами.Внутри одного из фрагментов я могу сделать следующее:
Однако, когда я пытаюсь удалить виды, можно заметить серьезные утечки памяти.Android Profiler в Android Studio показывает, что большая часть памяти не восстанавливается из раздела «Графика», когда я интенсивно (тестирую продукт) вызываю populateItems () и clearFragment ()
Вот как я динамически создаю компоненты представления внутри фрагмента:
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState)
{
...
// populate the layouts
populateItems(view);
...
}
// THIS IS THE FUNCTION USED TO POPULATE THE FRAGMENT
public void populateItems(View vw)
{
LinearLayout horizontalView;
ImageView faceImg;
Button renameBtn;
fragment_id = (LinearLayout)getActivity().findViewById(R.id.fragment_cunoscuti);
if(fragment_id != null)
{
for (int i = 0; i < files.length; i++)
{
String imagePath = Constants.getKnownPath() + File.separator + files[i].getName();
// set the image view
faceImg = new ImageView(getActivity());
faceImg.setImageBitmap(FileUtils.getBitmapFromFile(imagePath));
....
// create the button ...
renameBtn = new Button(getActivity());
....
// create this for some irrelevant reason :)
horizontalView = new LinearLayout(getActivity());
....
horizontalView.addView(faceImg);
horizontalView.addView(renameBtn);
....
fragment_id.addView(horizontalView,params);
}
}
// THIS IS THE FUNCTION USED AT SOME POINT TO CLEAR THE FRAGMENT
public void clearFragment()
{
if(fragment_id != null)
{
for(int x=0;x<fragment_id.getChildCount();x++)
{
if(fragment_id.getChildAt(x) instanceof LinearLayout)
{
LinearLayout FL = (LinearLayout) fragment_id.getChildAt(x);
FL.removeAllViewsInLayout();
}
}
fragment_id.removeAllViewsInLayout();
}
// added just for tests
System.gc();
}
В: Я запросил стек-поток для подобных проблем, но не смог решить.Как можно избежать утечек памяти при попытке сохранить функциональность очистки представления фрагментов?
Спасибо.