我是靠谱客的博主 机灵薯片,最近开发中收集的这篇文章主要介绍【Unity】子线程调用主线程方法报错,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

很多第三方广告SDK的各种回调通常是在Java子线程调用的, 如果在这些回调方法中直接调用主线程的方法就会报错, 比如:UnityException: xxx can only be called from the main thread(xxx方法只能在主线程调用).

首先介绍一下原理:

我接的是广告SDK, 大家都知道SDK在播放广告时会从游戏的主Activity切换到广告Activity, 此时主Activity被暂停, 广告播完后点击关闭又会回到游戏主Activity, 利用这个特性就可以把主线程的方法放到OnApplicationPause(bool pause)中调用.

原理明确, 所以这个方法只适用于有OnApplicationPause(bool pause)回调的。

首先要定义一个bool变量用于在SDK回调方法中做下是否触发主线程方法的标记, 然后在OnApplicationPause(bool pause)时进行主线程回调触发, 代码如下:

private bool adCallbackTrigger;
private void OnApplicationPause(bool pause)
    {
        if (pause) return;

        if (adCallbackTrigger)
        {
            videoAdSuccessCallback?.Invoke();
            adCallbackTrigger = false;
        }
    }
//此方法为SDK的回调(从子线程调用的)
public void onRewardedVideoAdPlayClosed(string unitId, bool isReward)
    {
        //广告播放完毕, 标记为触发主线程回调
        adCallbackTrigger = isReward;
    }

 

最后

以上就是机灵薯片为你收集整理的【Unity】子线程调用主线程方法报错的全部内容,希望文章能够帮你解决【Unity】子线程调用主线程方法报错所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部