c# – Unity3d开发:JNI错误(app bug):访问过时的本地引用0x200
发布时间:2020-12-15 23:35:39 所属栏目:百科 来源:网络整理
导读:我在开发unity3d项目时使用 AndroidJavaObject.我尝试了一个非常简单的代码,如下所示,但它会引发标题中的异常. using UnityEngine;using System.Collections;using System.Threading;public class MainScript : MonoBehaviour { // Use this for initializat
我在开发unity3d项目时使用
AndroidJavaObject.我尝试了一个非常简单的代码,如下所示,但它会引发标题中的异常.
using UnityEngine; using System.Collections; using System.Threading; public class MainScript : MonoBehaviour { // Use this for initialization void Start () { } void OnGUI() { if (GUI.Button(new Rect(50,50,1000,200),"Open Activity")) { Debug.Log("pressed"); Thread t1 = new Thread(new ThreadStart(ListenThread)); t1.IsBackground = false; t1.Start(); } //quit if (Input.GetKey(KeyCode.Escape) || Input.GetKey(KeyCode.Home)) { Application.Quit(); } } public static void ListenThread() { AndroidJavaObject jo = new AndroidJavaObject("java.lang.String","some_string"); int hash = jo.Call<int>("hashCode"); Debug.Log(hash); } } 但是,如果我没有按如下方式将AndroidJavaObject放在一个线程中,它将正常运行. using UnityEngine; using System.Collections; using System.Threading; public class MainScript : MonoBehaviour { // Use this for initialization void Start () { } void OnGUI() { if (GUI.Button(new Rect(50,"Open Activity")) { Debug.Log("pressed"); AndroidJavaObject jo = new AndroidJavaObject("java.lang.String","some_string"); int hash = jo.Call<int>("hashCode"); Debug.Log(hash); } //quit if (Input.GetKey(KeyCode.Escape) || Input.GetKey(KeyCode.Home)) { Application.Quit(); } } public static void ListenThread() { AndroidJavaObject jo = new AndroidJavaObject("java.lang.String","some_string"); int hash = jo.Call<int>("hashCode"); Debug.Log(hash); } } 但是在我的应用程序中,将调用AndroidJavaObject的阻塞函数,因此我必须使用一个线程.第一个代码中的问题是什么?是因为unity3d不支持线程中的AndroidJavaObject吗?请帮忙,谢谢! 解决方法
哈哈,我已经解决了.只需将线程附加到AndroidJNI,因为线程需要连接到JVM.代码如下:
public static void ListenThread() { AndroidJNI.AttachCurrentThread(); AndroidJavaObject jo = new AndroidJavaObject("java.lang.String","some_string"); int hash = jo.Call<int>("hashCode"); Debug.Log(hash); AndroidJNI.DetachCurrentThread(); } 当线程完成时,Donot忘记分离. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |