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

问题描述 投票:0回答:1

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

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

[已在真实硬件和Oreo上的仿真器上测试,仅在Pie上仿真器。

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

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

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

应用程序从ViewPager片段开始,该片段具有将其带到“正在播放”片段(开始播放音频)的按钮。该片段实质上是一个全屏的STOP按钮,其中显示了一些其他信息,以及此处未使用的其他几个按钮。击中停止将返回到视图寻呼机,并且在大多数情况下都可以正常工作。

但是,如果在Android Emulator for 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会重新出现。

再次,对这个模糊的问题感到抱歉,但即使是攻击这个问题的方法,我也被困住了。

片段的“旧”版本(包含旧数据)在显示屏上“卡住”:简单文本(日志记录确认正在更改)在onResume中设置的TextView中未更改。片段(应为...

android-layout android-fragments android-emulator android-lifecycle android-9.0-pie
1个回答
0
投票

我的应用程序中有同样的问题。我的应用程序在android o中正常工作。但是当我尝试在android pie中启动时,我的应用程序片段返回白屏错误。我正在使用androidx库。

© www.soinside.com 2019 - 2024. All rights reserved.