Android Java runOnUiThread()

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

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线程)或在短时间内调用此方法超过一千次,你不应该看到任何差异。

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

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

它不太可能导致UI进程出现任何重大中断,但在UI线程上运行它确实没有意义。

如果您正在进行大量工作,则应确保不在UI线程上执行此操作。