【问题标题】:Optimizing Memory in Android when managing Fragment Transactions在管理 Fragment Transactions 时优化 Android 中的内存
【发布时间】:2015-10-26 17:11:00
【问题描述】:

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

 Fragment myFragment=new MyFragment();
 FragmentManager fragmentManager = getFragmentManager();
 fragmentManager.beginTransaction().addToBackStack("MyFragment")
 .replace(R.id.content_frame, myFragment,"AirtimeFragment").commit();

使用它时,我必须为每个片段创建一个新的Object,这不利于内存消耗。

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

【问题讨论】:

  • 每个片段都有自己独特的视图。所以你的意思是你所有的屏幕都共享相同的布局?

标签: android android-fragments memory-management


【解决方案1】:

试试这个https://github.com/rathodchintan/Fragment-Back-Stack

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

【讨论】:

    【解决方案2】:

    你可以使用这个方法来管理分片交易

    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());
    
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多