Android 碎片垃圾收集问题

Android 碎片垃圾收集问题,android,android-fragments,Android,Android Fragments,我正在编写一个使用片段的应用程序,我在DDMS堆转储中看到了一个非常混乱的行为:当我最初运行应用程序时,假设堆栈中有几个片段: HomeFragment: 1 WelcomeFragment: 1 SignInFragment: 1 CreateAcctFragment: 1 这两个方面的直接主导因素是 然后我旋转屏幕。我现在得到: HomeFragment: 2 WelcomeFragment: 2 SignInFragment: 2 CreateAcctFragment: 2 现在,每个

我正在编写一个使用片段的应用程序,我在DDMS堆转储中看到了一个非常混乱的行为:当我最初运行应用程序时,假设堆栈中有几个片段:

HomeFragment: 1
WelcomeFragment: 1
SignInFragment: 1
CreateAcctFragment: 1
这两个方面的直接主导因素是

然后我旋转屏幕。我现在得到:

HomeFragment: 2
WelcomeFragment: 2
SignInFragment: 2
CreateAcctFragment: 2
现在,每个实例的直接主导者分别是一个和另一个的
android.support.v4.app.FragmentManagerImpl

我最初认为我有内存泄漏,我的一个片段没有被垃圾收集,就像以前发生在我身上的那样。但是,在这种情况下,每次旋转屏幕时,我都会为每个屏幕添加一个实例。现在,无论我旋转屏幕多少次,我“只”看到每个屏幕的两个实例


有什么想法/建议吗?

如果未向activity onCreate()方法传递捆绑包,则只应实例化片段。如果将捆绑包传递给onCreate(),android框架将为您实例化它们

这是Activity.onCreate from fragment docs的示例:


是的,如果savedInstanceState为null,我不会实例化片段;这不是问题所在。谢谢你!凯瑟琳:如果你有答案,请贴出来接受!
public static class DetailsActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (getResources().getConfiguration().orientation
                == Configuration.ORIENTATION_LANDSCAPE) {
            // If the screen is now in landscape mode, we can show the
            // dialog in-line with the list so we don't need this activity.
            finish();
            return;
        }

        if (savedInstanceState == null) {
            // During initial setup, plug in the details fragment.
            DetailsFragment details = new DetailsFragment();
            details.setArguments(getIntent().getExtras());
            getFragmentManager().beginTransaction().add(android.R.id.content, details).commit();
        }
    }
}