Android Java runOnUiThread()

Ras*_*mus 6 java android

我一直在使用runOnUiThread方法搞乱一下.如果我只是在我的活动中制作一个方法:

public void Test()
{
    runOnUiThread(new Runnable() 
    {
        public void run() 
        {
            Log.v("mainActivity", "test");
        }
    });     
}
Run Code Online (Sandbox Code Playgroud)

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

Aus*_*n B 14

这是Activity.runOnUiThread(Runnable)的完整主体:

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

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

现在,如果您正在调用Handler.postAtFrontOfQueue(Runnable),那么就会出现问题,因为您的Runnable实际上是"切入线".在这种情况下,这可能会导致口吃,因为正在执行Runnable而不是需要进行的任何UI更新(如滚动).

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