【问题标题】: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 是否在做一些时髦的事情,比如在正确恢复/渲染之前显示应用程序的快照?

【问题讨论】:

    标签: android kotlin android-layout android-view


    【解决方案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 很高兴我能帮上忙(我想)大声笑 :) 快乐的编码伙伴!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 2021-08-29
    • 2023-03-11
    • 1970-01-01
    • 2020-06-13
    • 2014-09-17
    相关资源
    最近更新 更多