版本:Unity 6 (6000.0)
语言英语
  • C#

AndroidApplication.InvokeOnUnityMainThread

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实阅读了用户提出的每个建议更改,并在适用时进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public static void InvokeOnUnityMainThread(Unity.Android.Gradle.Manifest.Action action);

描述

在 Android 应用程序的主线程上调用委托。

如果您在 UI 线程上收到 Java 回调,但希望在 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); }); } }