首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Unity3D & Android:"UnityMain“和”主“线程之间的区别?

Unity3D & Android:"UnityMain“和”主“线程之间的区别?
EN

Stack Overflow用户
提问于 2015-08-11 23:54:49
回答 1查看 3.9K关注 0票数 4

TLDR:,我正在使用JNI从Unity调用自定义JAR。但安卓库表示,它运行在"UnityMain“线程上,而活动的实际ui线程称为"main”。这两者有什么区别呢?

Details: --这对我来说是个问题,因为我得到了错误“无法在线程中创建没有调用Looper.prepare()的处理程序”。下面是我从Java打印这两个线程时得到的输出:

代码语言:javascript
运行
复制
/// Java Output
Current Thread:    Thread[UnityMain,5,main]
MainLooper Thread: Thread[main,5,main]

为了解决这个问题,我使用Activity.runOnUiThread方法运行JNI调用:

代码语言:javascript
运行
复制
/// Unity C# Code
activityObj.Call("runOnUiThread", new AndroidJavaRunnable(() => {
  // JNI calls and other stuff
}

现在,在从Java打印这两个线程时,我得到了以下输出:

代码语言:javascript
运行
复制
/// Java Output
Current Thread:    Thread[main,5,main]
MainLooper Thread: Thread[main,5,main]

现在唯一的问题是,我无法从“主”线程(即在"runOnUiThread“回调中)调用Unity或调用。我得到以下Unity:

代码语言:javascript
运行
复制
/// 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“和”主“线程之间有什么区别呢?为什么Java“主”线程与统一线程不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-12 00:44:45

统一运行自己的线程来处理它的处理。在发布该应用程序时,它不会取代Android操作系统创建的Android主线程。通常,当您编写传统的Android应用程序时,只有一个主线程,处理UI的所有内容都必须在主线程上运行。使用第二个“主”线程,是由联合公司做出的一个设计选择,这样它就可以做它想做的任何事情,而不会干扰Android主线程的应用程序。如果您想在联合之外的Android中做任何事情,您需要在主线程上运行您的代码。您可以使用以下代码片段在任何地方执行此操作:

代码语言:javascript
运行
复制
new Handler(Looper.getMainLooper()).post(new Runnable() {
    @Override
    public void run() {
        Log.d("MAIN", "Thread? " + Thread.currentThread());
    }
});

如果要调用的Android/Java代码能够访问应用程序上下文或活动上下文,也可以使用runOnUiThread

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31953890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档