当前位置: 首页 > 面试题库 >

Android Java runOnUiThread()

蒲昀
2023-03-14
问题内容

我一直在弄乱runOnUiThread方法。如果我只是在活动中创建一个方法:

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

我注意到该可运行对象仅运行一次。但是,这不是问题。我想知道的是,如果我完全遗漏了某些东西,并且它在后台执行了某些操作,当我多次执行该方法时,它将导致帧速率下降。


问题答案:

这是Activity.runOnUiThread(Runnable)的全文:

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

该方法的主体是在你的后台线程仍然执行,类mHandler
android.os.Handler实现了的Runnable内部队列中的发布到它,所以,除非你正在做的工作,堵在了Runnable(这是一个
很大的 不不上(UI线程)或在短时间内调用此方法一千次以上,您应该不会看到任何区别。

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

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



 类似资料:

相关阅读

相关文章

相关问答