2015-05-29 106 views
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

这不是一个内存泄漏,垃圾收集器将被由系统最终调用。没有要求系统在完成后立即从内存中移除碎片。