gpt4 book ai didi

Android,仅在为 Activity 呈现 UI 后才运行代码

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:05 24 4
gpt4 key购买 nike

我知道这个问题在这里出现过很多次,但适用于所有这些情况的答案并不适用于我。当 Activity 开始时,我正在截取屏幕截图。我在 onCreate 的底部执行我的代码。它在 5 次中有 4 次效果很好,第 5 次屏幕还没有渲染,你得到一个黑色的屏幕截图。

我的解决方法是在 onCreate 结束时启动的 AsyncTask 中执行屏幕截图代码。如果我让 200 毫秒 sleep ,那么 10 次中有 9 次它会工作。 500 毫秒的 sleep 在 100% 的时间得到它,但您可以注意到延迟。这似乎也是一个糟糕的解决方案,因为 500 毫秒是一个任意数字,可能不适用于所有设备。

我如何知道 UI 何时呈现,以便我截取屏幕截图?

最佳答案

您可以使用 Window.getDecorView() 获取顶部装饰 View 然后使用 post(Runnable)在上面。使用装饰 View 会生成可在任何应用程序中运行的可重用代码,因为它不依赖于某些特定的 View元素是膨胀布局的一部分。

调用将导致您的 Runnable放置在消息队列中以在 UI 线程上运行,因此不要在 Runnable 中运行长时间的操作,以免阻塞 UI 线程。


简单实现——Kotlin

// @Override protected void onCreate(Bundle savedInstanceState) {

window.decorView.post {
// TODO your magic code to be run
}


简单实现——Java

// @Override protected void onCreate(Bundle savedInstanceState) {

getWindow().getDecorView().post(new Runnable() {

@Override
public void run() {
// TODO your magic code to be run
}

});

关于Android,仅在为 Activity 呈现 UI 后才运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27080799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com