1

У меня проблема с утечкой памяти в моем приложении. Я тестирую его с двумя фрагментами в ведьме, в первом я создаю большую переменную (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; 
    } 
} 

А вот некоторые экраны памяти

first fragment

second fragment

again first fragment

+1

Поставьте какой-то код и журналы, чтобы мы могли видеть, что происходит. – cyroxis

+0

Готово. Я опубликовал код и скриншоты памяти. – Alex

+0

Что происходит, если вы несколько раз меняли фрагменты? Возможно ли, что сборщик мусора еще не запущен? – cyroxis

ответ

1

Это не утечка памяти, сборщик мусора будет вызываться системой в конечном счете. Не требуется, чтобы система сразу удаляла фрагменты из памяти, когда вы закончили с ними.

Смежные вопросы