c# - Android & Unity3D - 函数调用转到错误的线程

标签 c# android multithreading unity-game-engine

所以我创建了一个在 Unity 游戏中显示广告的插件。在 Unity 中,我想调用扩展 UnityPlayerActivity 的类中的方法。这是我的一些来自 com/mycompany/mygame/MainActivity.java 的代码:

public class MainActivity extends UnityPlayerActivity {

    private static AdView adView;

    // Code the initializes the ad view goes here
    ...

    public static void hideAd() {
        adView.setVisibility(View.INVISIBLE);
    }

    public static void showAd() {
        adView.setVisibility(View.VISIBLE);
    }
}

hideAd()showAd() 是我希望能够从 Unity 调用的方法。在 Unity 中,这是我必须测试我的插件的一些示例代码:

AndroidJavaClass ajc;
bool ohBool = true;

void Update () {
    foreach (Touch touch in Input.touches) {
        if (touch.phase == TouchPhase.Began) {
            // Call my function
            float touchLoc = Camera.main.ScreenToWorldPoint(touch.position).y;
            if (touchLoc > 0.0f) {
                if (showAd) {
                    ajc.CallStatic("hideAd");
                    showAd = false;
                }
                else {
                    ajc.CallStatic("showAd");
                    showAd = true;
                }
            }
        }
    }
}

但是,只要发生这些函数调用,LogCat 就会向我吐这个:

AndroidJavaException: android.view.ViewRootImpl$CalledFromWrongThreadException:
Only the original thread that created a view hierarchy can touch its views.

我该怎么办?

编辑:这是我要求的初始化代码:

void Start() {
    AndroidJNI.AttachCurrentThread();
    ajc = new AndroidJavaClass("com.mycompany.mygame.MainActivity");
}

最佳答案

首先尝试附加当前线程。

void Start() {
    AndroidJNI.AttachCurrentThread();
    AndroidJavaClass ajc = new AndroidJavaClass("com.mycompany.mygame.MainActivity"); //This is your java class hierarchy
    ajc.CallStatic("showAd");
}

关于c# - Android & Unity3D - 函数调用转到错误的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23749341/

相关文章:

c# 类型别名/自定义类型

c# - 用于C#的频谱分析仪,类似于Winamp?

java - 在 Android 上使用 jNAOqi

android - 我可以在 Android 的不同布局中使用相同的 id 吗?

multithreading - OCaml 错误 : Unbound module Event

java - 使用线程计算字符串数组字符

c# - 如何测试返回 IEnumerable<int> 的方法?

c# - 自定义控件绑定(bind)不起作用

android - 如何从我的主题 xml 文件自定义警报对话框按钮背景和标题分隔符

multithreading - 这是双重检查锁定的安全版本吗?