Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


InvokeOnUnityMainThread(Action)

Invokes delegate on Android application's main thread.
Read time 1 minuteLast updated 5 days ago

Definition

public static void InvokeOnUnityMainThread(Action action)

Parameters

action

Remarks

This is useful if you receive a Java callback on the UI thread, but want to process result on Unity's main thread.
This method blocks the calling thread until the Unity main thread finishes running the delegate. It has no effect in the Editor.
Additional Resources: Threads

Examples

using System.Threading;using UnityEngine;using UnityEngine.Android;public class JavaThreads : MonoBehaviour{ public class MyButtonListener : AndroidJavaProxy { public MyButtonListener() : base("android.view.View$OnClickListener") { } public void onClick(AndroidJavaObject view) { Debug.Log($"onClick called on UI thread ${Thread.CurrentThread.ManagedThreadId}"); AndroidApplication.InvokeOnUnityMainThread(() => { Debug.Log($"Delegating to main thread ${Thread.CurrentThread.ManagedThreadId}"); }); view.Dispose(); } } public void Start() { AndroidApplication.InvokeOnUIThread(() => { // Button can only be added on UI thread using var button = new AndroidJavaObject("android.widget.Button", AndroidApplication.currentActivity); button.Call("setText", "Hello World"); using var layoutParams = new AndroidJavaObject("android.widget.LinearLayout$LayoutParams", 500, 100); button.Call("setLayoutParams", layoutParams); button.Call("setOnClickListener", new MyButtonListener()); AndroidApplication.unityPlayer .Call<AndroidJavaObject>("getFrameLayout") .Call("addView", button); }); }}