1

我的應用程序中有內存泄漏問題。 我正在與2個片段測試它在女巫中的第一個予創建一個大變量(ArrayList的ARR =新的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

這不是一個內存泄漏,垃圾收集器將被由系統最終調用。沒有要求系統在完成後立即從內存中移除碎片。