Unity到Android插件错误:Can';t在未调用Looper.prepare()的线程内创建处理程序
本文关键字:prepare Looper 调用 线程 程序 处理 创建 错误 插件 Android Can | 更新日期: 2023-09-27 18:19:49
我在一个示例项目/插件上测试过多次,它似乎运行得很好。一旦我开始对我的实际项目进行集成,我就会出现一个错误(如下所示)。我已经花了大约两周的时间试图让Unity/Android插件正常工作,这是我做得最远的一次。我感觉很接近,但还远远没有找到解决方案!我能得到的任何帮助都将不胜感激。非常感谢。
我得到的错误:
08-28 15:38:25.200:I/Unity(6191):AndroidJavaException:java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序
C#(Unity):
// Update is called once per frame
void Update () {
testPlugin ();
printTestobj();
}
public void testPlugin() {
if (testobj == null) {
// First, obtain the current activity context
using (var actClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) {
playerActivityContext = actClass.GetStatic<AndroidJavaObject> ("currentActivity");
}
// Pass the context to a newly instantiated TestUnityProxy object
using (var pluginClass = new AndroidJavaClass("com.company.product.Main")) {
if (pluginClass != null) {
testobj = pluginClass.CallStatic<AndroidJavaObject> ("instance");
testobj.Call ("setContext", playerActivityContext);
}
}
}
}
Java(Android):
public Main() {
INSTANCE = this;
}
public static Main instance() {
Log.i(TAG, "Inside instance.");
if (INSTANCE == null) {
Log.i(TAG, "instance b1.");
INSTANCE = new Main();
Log.i(TAG, "instance b2.");
}
Log.i(TAG, "instance b3.");
return INSTANCE;
}
public void setContext(Context ctx) {
this.context = ctx;
Log.i(TAG, "Application context set.");
}
我不知道这个问题是否得到了回答,但我添加这个注释是为了帮助保持这个问题的活力。
第一步是弄清楚问题存在于哪行代码中。你不知道,因为Unity不会告诉你。
我也在为Unity开发Android插件。我看到的一个问题是,RuntimeException被Unity层捕获,自然的堆栈竞争似乎被Unity想要插入的东西所取代。
除非Unit开始显示堆叠种族,而不是捕捉它们并显示不同的东西,否则这些事情将无法解决。毕竟,如果你必须猜测错误发生在哪行代码上,你该如何解决错误?