片段的“旧”版本(包含旧数据)在显示屏上“卡住”:简单文本(日志记录确认正在更改)在onResume中设置的TextView中未更改。片段(应该替换该片段)可以正常工作(但不可见)-屏幕可见不透明,但触摸时“透明”-并且日志记录显示片段已正确交换。
[已在真实硬件和Oreo上的仿真器上测试,仅在Pie上仿真器。
(抱歉:我不确定甚至要问什么具体问题,或者什么代码相关,请建议可能有帮助。请记住上面有关纯P且仅在睡眠后的限制。)
详细信息:此应用会接管整个屏幕,这对于目标受众(不是您的典型电话用户)是正确的。专门的音频播放器。在API 17-28上运行(使用“古老的”硬件作为特定目标)。
这里的一切都在一个活动中,涉及两个片段。一个是一个非常简单的片段,只有几个按钮(表示正在播放音频),另一个是带有相当简单视图的ViewPager。我相信这两个片段都存在问题,无论它是什么,但是我们将专注于简单的“播放”片段。
应用程序从ViewPager片段开始,该片段具有将其带到“正在播放”片段(开始播放音频)的按钮。该片段实质上是一个全屏的STOP按钮,其中显示了一些其他信息,以及此处未使用的其他几个按钮。击中停止将返回到视图寻呼机,并且在大多数情况下都可以正常工作。
但是,如果在Android Emulator for Pie上运行,如果允许屏幕在“播放”状态下超时,然后使用模拟器工具栏上的后退或电源按钮重新启动,则片段的“停止”按钮会起作用(该按钮处理程序被调用),碎片会更改(根据日志打印输出),但屏幕上的实际显示不会更改。 (有时,这需要两次睡眠,才可以进行两次以上的睡眠。)然后,将激活ViewPager屏幕的按钮,如果我单击它们,则记录显示它们正在被调用。如果我按下了(不可见的)开始按钮,则片段(根据日志)会再次更改,并且音频会重新启动。这可以永远持续下去。 (系统状态栏中的“音频播放”图标会在应有的状态下出现。)单击“概述”按钮,然后在应用程序上单击,将正确的屏幕刷新到适当的屏幕。旋转(但只有在单击新的“旋转我”按钮之后才可以解决)。
我在“播放”片段中放置了一个静态int计数器,并且我看到它按预期的那样通过onCreateView递增(在日志中可以看到)。它也显示在屏幕上的TextView中的onResume中,并且在遇到错误时不会改变。日志确认已调用onResume。屏幕上有闪烁的文本,但发生这种情况时它不会闪烁(直到使用“概述”或旋转进行完全刷新为止。)
我还在记录“正在播放”片段的对象位置,并且它没有变化。日志消息确认该类的内存没有被回收。 (我使用一个非静态计数器也对onCreateView调用进行计数,而不是像完全重新创建该类一样将其重置为零。)日志确认从onCreateView到onDestroyView的完整生命周期正在发生,而显示仍保持不变不变。
我正在使用androidx / SupportFragmentManager。
我尝试了很多“随机”的事情:
有时它们会稍微改变一些东西,但是没有一个能解决潜在的问题。谁能提出更好的问题/实验?考虑到所涉及的(复杂的)代码量,将代码暂存到此处只会使情况变得更糟。如果您想查看整个内容,请参见github。 (https://github.com/DonnKey/homerplayer。)有任何线索,我参与之前,该版本的bug会重新出现。
再次,对这个模糊的问题感到抱歉,但即使是攻击这个问题的方法,我也被困住了。
片段的“旧”版本(包含旧数据)在显示屏上“卡住”:简单文本(日志记录确认正在更改)在onResume中设置的TextView中未更改。片段(应为...
我的应用程序中有同样的问题。我的应用程序在android o中正常工作。但是当我尝试在android pie中启动时,我的应用程序片段返回白屏错误。我正在使用androidx库。