FragmentActivity的实现问题

a220315410 2014-11-03 12:09:03
FragmentActivity的onCreate函数实现:
 protected void onCreate(Bundle savedInstanceState) {
mFragments.attachActivity(this, mContainer, null);
// Old versions of the platform didn't do this!
if (getLayoutInflater().getFactory() == null) {
getLayoutInflater().setFactory(this);
}

super.onCreate(savedInstanceState);

NonConfigurationInstances nc = (NonConfigurationInstances)
getLastNonConfigurationInstance();
if (nc != null) {
mAllLoaderManagers = nc.loaders;
}
if (savedInstanceState != null) {
Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG);
mFragments.restoreAllState(p, nc != null ? nc.fragments : null);
}
mFragments.dispatchCreate();
}


而,3.0以上的Activity的onCreate函数实现如下(以下代码为4.2.2):
protected void onCreate(Bundle savedInstanceState) {
if (DEBUG_LIFECYCLE) Slog.v(TAG, "onCreate " + this + ": " + savedInstanceState);
if (mLastNonConfigurationInstances != null) {
mAllLoaderManagers = mLastNonConfigurationInstances.loaders;
}
if (mActivityInfo.parentActivityName != null) {
if (mActionBar == null) {
mEnableDefaultActionBarUp = true;
} else {
mActionBar.setDefaultDisplayHomeAsUpEnabled(true);
}
}
if (savedInstanceState != null) {
Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG);
mFragments.restoreAllState(p, mLastNonConfigurationInstances != null
? mLastNonConfigurationInstances.fragments : null);
}
mFragments.dispatchCreate();
getApplication().dispatchActivityCreated(this, savedInstanceState);
mCalled = true;
}

我们可以看到,如果Activity内嵌了Fragment,那么activity在回收后,恢复的过程中,savedInstanceState!=null.

那么FragmentActivity就会恢复fragment一次,而后,Activity又会恢复Fragment一次,这里是不是意味着,一个Fragment在界面恢复后就会变为2个?这是不是一个内存泄漏问题呢?

不知道是不是哪里看漏了,看懂了的兄弟给指点一下
...全文
280 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
开发者_android 2014-11-05
  • 打赏
  • 举报
回复
引用 1 楼 a220315410 的回复:
问题已经搞懂了,FRAGMENTS_TAG的定义在原生系统和Support包中的定义是不同的:
    static final String FRAGMENTS_TAG = "android:fragments";
    static final String FRAGMENTS_TAG = "android:support:fragments";
所以恢复两次是不可能的。
对的.
jamseyang 2014-11-05
  • 打赏
  • 举报
回复
自 问 自 答
a220315410 2014-11-03
  • 打赏
  • 举报
回复
问题已经搞懂了,FRAGMENTS_TAG的定义在原生系统和Support包中的定义是不同的:
    static final String FRAGMENTS_TAG = "android:fragments";
    static final String FRAGMENTS_TAG = "android:support:fragments";
所以恢复两次是不可能的。

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧