iDeMonnnnnn / DeMon-ARA

🎈Activity Results API自动化注册&极简使用方案。

Home Page:https://demon.blog.csdn.net/article/details/123276161

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

有几个疑问?

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同理
image

commented

这几个问题我确实没考虑到。

  1. ActivityResultCaller作为key其实是传入Activity,这样其实容易内存泄漏。个人是不推荐的。
  2. key的保存可以考虑过用LRU缓存优化,也不用担心占用内存过大。这样不remove也没多大关系,也能解决多层fragment嵌套的问题。
    3.Activity Result API除了几个官方的系统api,是真的不好用,更推荐GhostFragment。
  3. singleTask配合 onNewIntent 模式 暂时还没有解决思路,可以继续探讨。