有几个疑问?
smileToWxm opened this issue · comments
刚好这2天升级了下Appcompat版本,准备对 Result API下手 就看到作者的文章,整体下来受益很大。昨天按照示例试验了下,有几个疑问?
1、在 onActivityCreated回调里注册监听fragment的生命周期时,registerFragmentLifecycleCallbacks方法的 recursive参数传的是false,这样若是在fragment里在弹出dialogFragment或加载子fragment时就不会触发回调
2、在 onActivityDestroyed回调里实现反注册 unregisterFragmentLifecycleCallbacks 时会导致 接收不到fragment结束相关的生命周期比如onFragmentDetached。通过日志发现 回调是先走完 onActivityDestroyed 再去调用fragment相关回调。若此时实现 unregisterFragmentLifecycleCallbacks那么后续就不会收到相应的回调,那也就无法释放存放于DeMonActivityCallbacks内的临时缓存 resultMap。经验证好像无需进行 反注册 unregisterFragmentLifecycleCallbacks
3、采用 className加时间戳 作为key并存放于 intent中的方式让我眼前一亮,不过 若是在 singleTask配合 onNewIntent 模式下,有些人会直接使用 setIntent(intent); 来对数据进行接收。 这样就会导致 key值的丢失,这样 在 onActivityDestroyed就无法移除监听
4、是否可以采用 ArrayMap<ActivityResultCaller, DeMonActivityResult> mResultArrayMap 的形式作为 DeMonActivityResult的临时缓存?fragment同理
这几个问题我确实没考虑到。
- ActivityResultCaller作为key其实是传入Activity,这样其实容易内存泄漏。个人是不推荐的。
- key的保存可以考虑过用LRU缓存优化,也不用担心占用内存过大。这样不remove也没多大关系,也能解决多层fragment嵌套的问题。
3.Activity Result API除了几个官方的系统api,是真的不好用,更推荐GhostFragment。 - singleTask配合 onNewIntent 模式 暂时还没有解决思路,可以继续探讨。