概述
很多第三方广告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】子线程调用主线程方法报错所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复