Unity3D上的Java插件无法启动新线程

标签 java android multithreading unity3d

我有一个 java 插件,用于我开发的简单 java 应用程序。 此插件启动一个也使用网络的新线程。

执行的类正在实现 Runnable 并以这种方式启动线程:

AsyncTask.execute(this);

这适用于 java 应用程序并且运行没有任何问题,但是,当我尝试使用 Unity3D 运行这个插件时,它会抛出一个错误并且不会运行我的插件

在Unity3D中执行的代码:

var token="AbCd123456789";
var jo = new AndroidJavaObject("com.edealya.lib.AppayableUnityAdapter");
jo.Call("runApplayble",token);

runAppayable 方法是:

public void runAppayable(String token){
DeviceIdentifier edDevice = new DeviceIdentifier(
                                this.getApplicationContext(),token);
edDevice.update();

和 edDevice.update();是启动新线程的方法。

I/Unity   (27624): Exception: java.lang.RuntimeException: Can't create handler inside     thread that has not called Looper.prepare()
I/Unity   (27624):   at UnityEngine.AndroidJNISafe.CheckException () [0x00000] in   <filename unknown>:0 
I/Unity   (27624):   at UnityEngine.AndroidJNISafe.NewObject (IntPtr clazz, IntPtr methodID, UnityEngine.jvalue[] args) [0x00000] in <filename unknown>:0 
I/Unity   (27624):   at UnityEngine.AndroidJavaObject._AndroidJavaObject (System.String className, System.Object[] args) [0x00000] in <filename unknown>:0 
I/Unity   (27624):   at UnityEngine.AndroidJavaObject..ctor (System.String className, System.Object[] args) [0x00000] in <filename unknown>:0 
I/Unity   (27624):   at ReflectionFx.startAppayable () [0x00006] in /Users/Shared/Unity/4-0_AngryBots/Assets/Scripts/Fx/ReflectionFx.cs:30 
I/Unity   (27624):   at ReflectionFx.Start () [0x00000] in /Users/Shared/Unity/4-0_AngryBots/Assets/Scripts/Fx/ReflectionFx.cs:38 

我该如何解决这个问题?

最佳答案

AsyncTask 必须在 UiThread 或有 Looper 的线程上启动,尝试用

myActivity.runOnUiThread(new Runnable(){AsyncTask.execute(this);})

或者在启动线程之前调用 Looper.prepare()

关于Unity3D上的Java插件无法启动新线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19511379/

相关文章:

c# - 当我的代码不存在时,我如何让我的代码创建一个 sqlite 数据库?

按下后退按钮时Android关闭应用程序

java - java中有没有更好的并行调用api的方法?

java - 使用 JSTL forEach 迭代 ArrayList 项

java - Mac OS X Snow Leopard 上的 Oracle

android - 如何让 1024 x 600 的 Android 模拟器工作?

C - 使用多线程编程从命令行计算统计值

java - 检测两个可以旋转的 Sprite 的碰撞

java - 创建具有特定 session ID 的 session

java - ImageIO.read 在多线程执行中抛出异常