如何在恢复之前更新视图?

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:如何在加载视图之前和之后处理更新?

如何在视图启动之前在 SwiftUI 中加载更新的变量?

如何更新之前在代码中设置的 NSLayoutConstraint 常量? - 斯威夫特

如何在iphone中更改下一个视图之前突出显示按钮?

如何使用更新的数据刷新 NSManagedObject - Core Data

如何根据之前的选择器视图选择更新PickerView 数据