AndroidApplication.InvokeOnUnityMainThread
Declaration
public static void InvokeOnUnityMainThread(Unity.Android.Gradle.Manifest.Action action);Описание
Вызывает delegate на главном потоке приложения Android.
Это полезно, если вы получаете обратный вызов Java на потоке UI, но хотите обработать результат на главном потоке Unity.
Дополнительные ресурсы: Потоки
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); }); } }