在Android中管理片段事务时优化内存

在Android中管理片段事务时优化内存,android,android-fragments,memory-management,Android,Android Fragments,Memory Management,我在我的应用程序中使用片段,所有片段共享一个基本活动,所以在应用程序关闭之前活动不会被破坏。当我从一个片段导航到另一个片段时,我使用了以下代码: Fragment myFragment=new MyFragment(); FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().addToBackStack("MyFragment") .replace(R.id.c

我在我的应用程序中使用片段,所有片段共享一个基本活动,所以在应用程序关闭之前活动不会被破坏。当我从一个片段导航到另一个片段时,我使用了以下代码:

 Fragment myFragment=new MyFragment();
 FragmentManager fragmentManager = getFragmentManager();
 fragmentManager.beginTransaction().addToBackStack("MyFragment")
 .replace(R.id.content_frame, myFragment,"AirtimeFragment").commit();
使用它时,我必须为每个不利于内存消耗的片段创建一个新的
对象

因此,我想创建一个全局方法来管理所有片段,并在其中检查片段是否已经存在,然后无需重新创建它,只需使用现有的片段对象,这样我就可以减少内存消耗?

尝试这种方法


您可以将堆栈变量创建为公共静态变量,然后检查它是否存在…

您可以使用此方法来管理片段事务

private void FragmentReplace(Class fragmentClass, Bundle bundle,Boolean isAddToBackStack) {
    try {

        Fragment fragment;
        Bundle bundle1Local;

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

        System.out.println("Class Name of Fragment is String ::= " + fragmentClass.getName());
        String fragmentTag=fragmentClass.getName();

        fragment=fragmentManager.findFragmentByTag(fragmentTag);

        if (fragment == null) {

            System.out.println("Fragment is null, generating new "+fragmentTag+" fragment ");

            /**
             * Creating Fragment Object But Please Remember Fragment Must Have Empty Constrctor and it is Public
             */

            Constructor constructor = fragmentClass.getConstructor();
            Object instanceFragment = constructor.newInstance();

            fragment=(Fragment) instanceFragment;
            if(bundle != null) {
                fragment.setArguments(bundle);
            }
            if(isAddToBackStack)
                fragmentTransaction.addToBackStack(fragmentTag);

            fragmentTransaction.replace(R.id.content_frame, fragment, fragmentTag);
            fragmentTransaction.commit();

        } else if (fragment.isAdded()) {

            System.out.println("Fragment is added  " + fragmentTag + " fragment ");

            bundle1Local=fragment.getArguments();
            if(bundle1Local != null)
                fragment.getArguments().clear();

            if(bundle != null) {
                 fragment.getArguments().putAll(bundle);
            }
            if(isAddToBackStack)
                fragmentTransaction.addToBackStack(fragmentTag);

            fragmentTransaction.show(fragment);

        } else {

            System.out.println("Fragment is not added but still there  " + fragmentTag + " fragment ");

            fragmentTransaction.detach(fragment);
            System.out.println("Fragment is detached  " + fragmentTag + " fragment ");

            System.out.println("Fragment is null, generating new  " + fragmentTag + " fragment ");
            Constructor constructor = fragmentClass.getConstructor();
            Object instanceFragment = constructor.newInstance();

            fragment=(Fragment) instanceFragment;
            if(bundle != null) {
                fragment.setArguments(bundle);
            }
            if(isAddToBackStack)
                fragmentTransaction.addToBackStack(fragmentTag);

            fragmentTransaction.replace(R.id.content_frame, fragment, fragmentTag);
            fragmentTransaction.commit();

        }

    } catch (Exception ex) {

        System.out.println("Error::" + ex.toString());

    }

}

每个片段都有自己独特的视图。你是说你所有的屏幕都有相同的布局?