У меня проблема с утечкой памяти в моем приложении. Я тестирую его с двумя фрагментами в ведьме, в первом я создаю большую переменную (ArrayList arr = new ArrayList (10000000);), чтобы увидеть, будет ли память пустым при изменении фрагмента (вторая пустая) , но, к сожалению, этого не происходит.Утечка памяти фрагмента Android
Деятельность - ActionBarActivity, и когда я меняю фрагмент, я удаляю (фрагмент) и popbackstack, но память увеличивается каждый раз, когда я меняю.
Пожалуйста, помогите мне !!!!
Здесь ниже я отправляю код: активность является ActionBarActivity и имеет боковое меню NavigationDrawer:
public class MainActivity extends ActionBarActivity implements NavigationDrawerCallbacks {
private Toolbar mToolbar;
private NavigationDrawerFragment mNavigationDrawerFragment;
private DrawerLayout mDrawerLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer);
setSupportActionBar(mToolbar);
mNavigationDrawerFragment = (NavigationDrawerFragment) getFragmentManager().findFragmentById(R.id.fragment_drawer);
mNavigationDrawerFragment.setup(R.id.fragment_drawer, (DrawerLayout) findViewById(R.id.drawer), mToolbar);
setActionBarMenu(true);
selectItem(1);
}
private void selectItem(int position) {
final FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
for (int i = 0; i < fm.getBackStackEntryCount(); ++i) {
ft.remove(fm.findFragmentByTag(fm.getFragments().get(fm.getBackStackEntryCount() - 1).getTag()));
fm.popBackStack();
}
switch (position) {
case 0:
break;
case 1:
onChangeFragment(new UsersCheckInFragment(), false);
case 2:
etc...
}
ft.commit();
}
@Override
public void onNavigationDrawerItemSelected(int position) {
selectItem(position);
}
public void onChangeFragment(Fragment fragment, boolean addToBackStack) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, ((Object) fragment).getClass().getSimpleName());
if (addToBackStack)
ft.addToBackStack("");
ft.commit();
}
}
И фрагмент:
public class UsersFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_users, container, false);
mainActivity = (MainActivity) getActivity();
ArrayList<Integer> arr = new ArrayList<Integer>(10000000);
return view;
}
}
А вот некоторые экраны памяти
Поставьте какой-то код и журналы, чтобы мы могли видеть, что происходит. – cyroxis
Готово. Я опубликовал код и скриншоты памяти. – Alex
Что происходит, если вы несколько раз меняли фрагменты? Возможно ли, что сборщик мусора еще не запущен? – cyroxis