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