如何在恢复之前更新视图?
Posted
技术标签:
【中文标题】如何在恢复之前更新视图?【英文标题】:How to update a view prior to resume? 【发布时间】:2021-08-21 06:26:36 【问题描述】:背景
我有一个 android 应用程序,它在主要活动的文本视图中将时间显示为字符串。每过一分钟,我都会更新文本。当按下我手机上的电源按钮时,手机被锁定并且应用程序暂停(它没有被破坏)。手机解锁后,应用程序会恢复,一切照常进行。
问题
解锁手机后,应用弹出并恢复,但最初,textview中显示的时间是应用被锁定的时间。大约一秒钟后,我会更新时间,明确设置恢复时间。
override fun onResume()
// Try to make the clock update immediately
clockView.text = SimpleDateFormat("h:mm").format(Date())
super.onResume()
如何在显示旧值之前更新文本视图? android 是否在做一些时髦的事情,比如在正确恢复/渲染之前显示应用程序的快照?
【问题讨论】:
【参考方案1】:你为什么不尝试覆盖 onStart,如果我没记错的话,它是在 onResume 之前调用的,到那时应用程序还不会显示给用户。
override fun onStart()
clockView.text = SimpleDateFormat("h:mm").format(Date())
super.onStart()
【讨论】:
我在最初的问题中没有提到它,但我也尝试过生命周期调用,以及其他一些调用(实际上并没有被调用)。我的问题是我在调用super.onStart()
之后设置视图文本,而不是之前调用它。你的代码帮助我发现了那个错误。谢谢!
我刚刚发现,虽然这有助于从锁定屏幕返回时,但当我在使用手机时恢复应用程序时,它目前没有帮助。例如,在使用应用程序时点击主页以转到默认启动器,然后在一分钟后返回应用程序(没有关闭)。我已经确认 onStart/onResume 仍在被调用,但时钟文本视图需要一点时间来更新。因此,您仍然会先看到旧时间,然后再更新。有什么想法吗?
这有点棘手,你为什么不在暂停活动之前清除文本,这样当你返回活动时,你会看到一秒钟的空白视图,然后在 onStart 或onResume 被调用,你可以设置文本的更新时间。 clockView.text = "" 可以在 onPause() 中完成
哈,这正是我所做的!我只是想确定我可以在它显示之前对其进行更新。但是,显然情况并非如此。我可以在 onStart/onResume 方法中有一个断点,然后导航到我的应用程序,即使我没有继续超过断点,应用程序仍然会加载。因此,它们不会阻塞初始负载。总的来说,这很好,只是不适合我的用例,哈哈。
@Andrew 很高兴我能帮上忙(我想)大声笑 :) 快乐的编码伙伴!以上是关于如何在恢复之前更新视图?的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionView:如何在加载视图之前和之后处理更新?
如何更新之前在代码中设置的 NSLayoutConstraint 常量? - 斯威夫特