Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Java runOnUiThread()

Tags:

java

android

I have been messing around a bit with the runOnUiThread method. And if I simply make a method in my activity:

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

I noticed that this runnable only runs once. However, this is not a problem. What I was wondering is if I have completely missed something and it does something in the background that would cause a frame rate drop when I have executed the method a couple times.

like image 638
Rasmus Avatar asked May 07 '13 03:05

Rasmus


People also ask

How do I use runOnUiThread on Android?

Step 1 − Create a new project in Android Studio, go to File ⇒ New Project and fill all required details to create a new project. Step 2 − Add the following code to res/layout/activity_main. xml. In the above code, we have taken one button and text view, when you click on button , it will update text view.

How does runOnUiThread work?

Basically what runOnUiThread() will do is - Runs the specified action on the UI thread. It will check the current thread and if it finds its the MainThread it will execute that task immediately , otherwise first it will switch you to app MainThread and then it will execute the given task.

How do you use kotlin runOnUiThread?

runOnUiThread runs the specified action on the UI thread. If the current thread is the UI thread, then the action is executed immediately. If the current thread is not the UI thread, the action is posted to the event queue of the UI thread.

What is run on UI thread Android?

User Interface Thread or UI-Thread in Android is a Thread element responsible for updating the layout elements of the application implicitly or explicitly. This means, to update an element or change its attributes in the application layout ie the front-end of the application, one can make use of the UI-Thread.


2 Answers

This is the full body from Activity.runOnUiThread(Runnable):

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

The method body is still executed in your background thread, and mHandler of class android.os.Handler implements an internal queue for Runnables posted to it, so unless you're doing blocking work in the Runnable (which is a big no-no on the UI Thread) or calling this method upwards of a thousand times in a short period, you should not see any difference.

Now, if you were calling Handler.postAtFrontOfQueue(Runnable), then there'd be an issue, because your Runnable is essentially "cutting in line". In this case, that would likely cause a stutter, because your Runnable is being executed instead of any UI updates that needed to take place (like scrolling).

Note that you only need to run UI updates on the UI thread, like calling any methods on a View (thus the name "UI Thread" and why this method exists) or any operation where the documentation explicitly states that it needs to be run on the UI thread. Otherwise, if you're already on a background thread, there's no real reason to leave it.

like image 183
Austin B Avatar answered Oct 16 '22 19:10

Austin B


It's unlikely that it would cause any significant interruption to your UI process, but there's really no point in running it on the UI thread.

If you are doing any significant amount of work, you should make sure that you do not do it on the UI thread.

like image 40
GreyBeardedGeek Avatar answered Oct 16 '22 20:10

GreyBeardedGeek