gpt4 book ai didi

java - 安卓Java runOnUiThread()

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:29:21 24 4
gpt4 key购买 nike

我一直在研究 runOnUiThread 方法。如果我只是在我的 Activity 中创建一个方法:

public void Test()
{
runOnUiThread(new Runnable()
{
public void run()
{
Log.v("mainActivity", "test");
}
});
}

我注意到这个 runnable 只运行一次。但是,这不是问题。我想知道的是,如果我完全遗漏了某些东西,它会在后台执行某些操作,当我执行该方法几次时会导致帧速率下降。

最佳答案

这是来自 Activity.runOnUiThread(Runnable) 的完整正文:

public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}

方法体仍然在你的后台线程中执行,类android.os.Handler的mHandler|为发布到它的 Runnables 实现一个内部队列,所以除非你在 Runnable 中做阻塞工作(这是 UI 线程上的 big 禁忌)或调用此方法超过一千次在短时间内,您应该看不到任何差异。

现在,如果您正在调用 Handler.postAtFrontOfQueue(Runnable) ,那么就会出现问题,因为您的 Runnable 本质上是“插队”。在这种情况下,这可能会导致卡顿,因为正在执行您的 Runnable 而不是需要进行的任何 UI 更新(如滚动)。

请注意,您只需要在 UI 线程上运行 UI 更新,例如调用 View 上的任何方法(因此名称为“UI Thread”以及此方法存在的原因)或任何操作文档明确指出它需要在 UI 线程上运行。否则,如果您已经在后台线程中,则没有真正的理由离开它。

关于java - 安卓Java runOnUiThread(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16410567/

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