片段管理事务时,在Android的优化内存 [英] Optimizing Memory in Android when managing Fragment Transactions

查看:94
本文介绍了片段管理事务时,在Android的优化内存的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用我的应用程序片段,其中所有的人共享一个基地的活性,使活动不被破坏,直到应用程序关闭。当我从一个片段到另一个导航,我使用了下列code:

I'm using Fragments in my app where all of them share one base activity, so activity is not destroyed till app closes. When I navigate from one fragment to another, I have used the following code:

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

在使用它,我必须创建一个新的对象为这是不好的内存消耗每个片段。

When using it I have to create a new Object for each fragment which is not good for memory consumption.

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

So I want to create one global method which manages all fragment in which it checks whether the fragment already exists, then no need to recreate it just uses the existing fragment object, so I can reduce memory consumption?

推荐答案

您能给我们这种方法片段交易管理

you can us this method for fragment transaction to manage

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

    }

}

这篇关于片段管理事务时,在Android的优化内存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆