后台UnityPlayer.UnitySendMessage不生效(Android)

与安卓接口对接时,常使用UnityPlayer.UnitySendMessage
给 Unity 发送一些消息。如果 App 进入后台,安卓端代码即使正常执行,Unity 方法也不会被调用。
问题描述
当应用进入后台一段时间后,即使安卓端 Java 代码正常执行,但其调用的UnityPlayer.UnitySendMessage
方法却无任何效果。
解决方法
不再使用UnitySendMessage
,转而使用实现安卓接口的方式回调 C# 代码。
举个例子,JAVA 端声明如下接口:
public interface IAzimiaoTest {
public void AzimiaoFun1();
}
Unity C# 实现该接口:
public class AzimiaoTestCsharp : AndroidJavaProxy
{
public AzimiaoTestCsharp():base("com.azimiao.IAzimiaoTest")
{
}
public void AzimiaoFun1(){
Debug.Log("[azimiaofun1]this is a c# unity output");
}
}
之后 new 一个AzimiaoTestCsharp
对象,通过约定好的方法传递给 Java 端:
var a = new AzimiaoTestCsharp();
androidObj.Call("regInterface", a);
安卓 Java 端保存一份参数引用后,可以把它当作 IAzimiaoTest 的接口实现,直接使用。
//something happen
a.AzimiaoFun1();
经过测试,这种接口调用的方式可以保证 APP 处于后台时依旧能调起 C# 代码。