0

另一个片段问题。

对于上下文:

  • 具有两个片段的单个活动应用程序,主页和设置。
  • 当应用程序启动时,我的活动会立即添加主页。
  • 在这个屏幕上,用户可以点击设置图标来查看设置片段。

正是在这一点上,我不确定是否应该使用#add#replace来显示我的设置片段。


让我解释一下为什么。

  1. 代替

替换片段非常酷。它对两个片段都有一个很好的进入/退出动画。并且调用 Home 中的生命周期方法 paused->destroy,允许它删除任何 observables 并释放不再需要的引用,因为视图不再显示。

但是,当我按下后退按钮以弹出设置时,主页现在必须重新创建自己。由于发生了一些事情并且列表有些复杂,因此我将单帧的帧率降至 60fps 以下(使用gpu 分析工具)。一些手机可以通过这个来供电,但像 Nexus 5 这样的手机不能,并且在点击按钮后视图实际弹出之前具有难看的过渡效果和延迟延迟(可能是 500 毫秒 - 1 秒)。

  1. 添加

添加片段也很酷。转换回来时没有帧率问题。所以它在我所有的测试设备上看起来都很好而且很流畅。

但是它实际上并没有退出视图。所以没有退出动画。释放观察者的生命周期事件也不会被调用,因此即使用户没有看到它,它仍然会将视图修改为它收到的更改。


那么哪个是适合我的情况的解决方案?对此有传统的答案吗?或者还有什么我应该做的吗?我应该重构大量代码以优化替换片段吗?或者 Home 可以坐在后台听事件?

4

1 回答 1

0

如果您的数据需要保存在设置页面上并来回流动,然后添加一行

transaction.addToBackStack(null);  

会有帮助,但是,

如果您再遍历 home-settings-home 几次,那么您将遇到后退按钮按下事件的大麻烦。此事件将移回您的堆栈中,直到离开最后一个片段页面。

因此,为了简单起见,在添加设置片段时,不要使用

transaction.addToBackStack(null);   

对于替换,
(主页上的动态数据将在替换时被删除,并在从设置中添加或重新启动应用程序时重新生成)。每次从设置页面返回时,您的主页都会加载,这是个坏主意。
当后续操作不再需要片段页面或该片段的使用完成时使用替换。

于 2018-12-23T18:26:02.800 回答