Bar*_*man 4 android android-fragments fragmentmanager
调用Fragment.setRetainInstance(true)
将使Fragment
保留在中FragmentManager
,但是View
保留了吗?我认为不是,但我正在寻求确认。我认为不是因为Fragment.onCreateView()
仍然被调用(即使onCreate()
不是)并且调用getView()
return null
。
Fragment
如果View
不保留跨配置更改,那有什么意义呢?原因之一是保留数据,以避免昂贵的重载,但是还有其他方法可以做到这一点。
提前致谢...
保留的片段是否保留其视图?
这取决于您如何定义它。该片段将onCreateView()
再次调用,因此应该为新活动设置其UI。但是,如果您将字段保留在窗口小部件上,那么这些字段将保留,并且让这些字段指向新窗口小部件是您的工作,以避免内存泄漏和其他问题。
如果没有视图,那么在配置更改中保留片段的意义何在?
保留数据,以避免昂贵的重载。
但是还有其他方法可以做到这一点
只有限制。
例如,在所有其他条件相同的情况下,最好通过保存的实例状态保留数据Bundle
。但是,它Bundle
不能容纳任意对象(例如Camera
),并且的大小限制为〜1MB Bundle
,因此它不能容纳较大的对象(例如照片)。
使用“保留”一词的部分原因是,保留的片段建立在上的旧onRetainNonConfigurationInstance()
回调之上Activity
。那是现在final
,不能使用,IIRC。
可以将比当前活动寿命更长的数据进行全局缓存(例如,用于数据库/网络I / O结果的POJO缓存,图像缓存)。但是,某些东西(例如)Camera
不属于此类的静态数据成员。
您使用Loader
框架检索到的资料(例如via CursorLoader
)会自动保留,但是该Loader
框架在以外的其他方面都有自己的问题CursorLoader
。
你不具备使用保留的片段。我发现它们相当有用。
归档时间: |
|
查看次数: |
711 次 |
最近记录: |