即使正在运行另一个片段,片段视图仍停留在屏幕上

时间:2019-06-03 02:09:12

标签: android-layout android-fragments android-emulator android-lifecycle android-9.0-pie

片段的“旧”版本(包含旧数据)在显示屏上“卡住”:简单文本(日志记录确认正在更改)在onResume中设置的TextView中不会更改。片段(应该替换该片段)可以正常工作(但不可见)-屏幕可见,但屏幕不透明,但触摸起来是“透明的”-日志显示片段已正确交换。

  • 仅在Android P上使用(在O上可以正常使用)
  • 仅在应用程序之前进入睡眠状态(直到那时才能正常工作)。有时,在应用重启后需要两次睡眠。
  • 片段在“下方”的行为正确(点击行为正确,日志看起来正确,副作用正确)
  • 更多剧烈动作(从“概览”,“旋转”中返回)会正确显示(暂时)。

在真实硬件和Oreo上的仿真器上进行了测试,仅在Pie上进行了仿真。

(抱歉:我什至不确定要问什么具体问题或相关代码,请建议可能有帮助。请记住上面有关仅P且仅在睡眠后的限制。)

详细信息:此应用程序将接管整个屏幕,这对于目标受众(不是您的典型电话用户)是正确的。专门的音频播放器。在API 17-28上运行(使用“古老的”硬件作为特定目标)。

这里的所有内容都包含在一个Activity中,涉及两个片段。一个是一个非常简单的片段,只有几个按钮(表示正在播放音频),另一个是带有相当简单视图的ViewPager。我相信这两个片段都存在问题,无论它是什么,但是我们将专注于简单的“播放”片段。

App在ViewPager片段中启动,该片段具有将其带到“正在播放”片段(将启动音频)的按钮。该片段实质上是一个全屏的STOP按钮,其中显示了一些其他信息,以及此处未使用的其他几个按钮。击中停止点会返回到视图分页器,并且在大多数情况下都能正常工作。

但是,在Android Pie模拟器上运行时,如果允许屏幕在“播放”状态下超时,然后使用模拟器工具栏上的后退或电源按钮重新启动,则片段的“停止”按钮会起作用(调用按钮处理程序),片段会更改(根据日志打印输出),但屏幕上的实际显示不会更改。 (有时,这需要两次睡眠,才可以进行两次以上的睡眠。)然后,将激活ViewPager屏幕的按钮,如果我单击它们,则记录显示它们正在被调用。如果我按下了(不可见的)开始按钮,则片段(根据日志)会再次更改,并且音频会重新启动。这可以永远持续下去。 (系统状态栏中的“音频播放”图标会在应有的状态下出现。)单击“概述”按钮,然后在应用程序上单击,将正确的屏幕刷新到适当的屏幕。旋转(但只有在单击新的“旋转我”按钮之后才可以解决)。

我在“正在播放”的片段中放置了一个静态int计数器,并且我看到它被onCreateView按预期方式增加了(在日志中可以看到)。它也显示在屏幕上的TextView中的onResume中,并且在遇到错误时不会改变。日志确认已调用onResume。屏幕上有闪烁的文本,但发生这种情况时不会闪烁(直到使用“概述”或旋转进行完全刷新为止)。

我还在记录“正在播放”片段的对象位置,并且它没有变化。日志消息确认该类的内存没有被回收。 (我使用非静态计数器也对onCreateView调用进行计数,而不是像完全重新创建类时那样将其重置为零。)日志会确认从onCreateView到onDestroyView的完整生命周期正在发生,而显示仍保持不变保持不变。

我正在使用androidx / SupportFragmentManager。

我尝试了很多“随机”的事情:

  • 在片段管理器中使用显式的分离/附加周期
  • 在onPause中将可见性设置为GONE,在onResume中将其恢复(它保持GONE,损坏的图像现在为空白,这与onResume被忽略是一致的!)(在onPause中都执行此操作是无操作的。)
  • 调用ViewGroup#invalidate()(无可见效果)(在片段帧和全屏上都尝试过。)
  • 切换片段之前弹出后退堆栈(无效,后退长度为0)
  • 提出了许多StackOverflow建议
  • 使用postDelayed()对onResume进行额外的调用(它们会被记录,但没有可见效果)。 (绝望!)
  • 禁用我认为可能很奇怪的代码。

有时候它们会稍微改变一些东西,但是没有一个能解决潜在的问题。谁能提出更好的问题/实验?考虑到所涉及的(复杂的)代码量,将代码暂存到此处只会使情况变得更糟。如果您想查看整个内容,请参见github。 (https://github.com/DonnKey/homerplayer。)只要有线索,我就可以在上一个版本的bug重新出现。

再次,对于这个模糊的问题,我们感到抱歉,但是我什至在攻击该问题的方法上也陷入困境。

0 个答案:

没有答案