【发布时间】:2015-08-11 23:54:49
【问题描述】:
TLDR:我正在使用 JNI 从 Unity C# 调用我的自定义 JAR。但是android库说它在“UnityMain”线程上运行,而活动的实际ui线程被称为“main”。两者有什么区别?
详情: 这对我来说是个问题,因为我收到错误“无法在未调用 Looper.prepare() 的线程内创建处理程序”。这是我从 Java 打印两个线程时得到的输出:
/// Java Output
Current Thread: Thread[UnityMain,5,main]
MainLooper Thread: Thread[main,5,main]
为了解决这个问题,我正在使用 Activity.runOnUiThread 方法运行 JNI 调用:
/// Unity C# Code
activityObj.Call("runOnUiThread", new AndroidJavaRunnable(() => {
// JNI calls and other stuff
}
现在我从 Java 打印两个线程时得到以下输出:
/// Java Output
Current Thread: Thread[main,5,main]
MainLooper Thread: Thread[main,5,main]
现在唯一的问题是我无法从“主”线程(即在“runOnUiThread”回调中)进行 Unity Coroutine 或 Invoke 调用。我收到以下 Unity 错误:
/// Unity C# Output
E/Unity (21048): Invoke can only be called from the main thread.
E/Unity (21048): Constructors and field initializers will be executed from the loading thread when loading a scene.
E/Unity (21048): Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function.
那么“UnityMain”和“main”线程有什么区别呢?为什么 Java 的“主”线程与 Unity 的不同?
【问题讨论】:
标签: android multithreading unity3d