Unity的Application.Quit退出函数-平台差异导致的Bug

2025/06 30 17:06
public static IEnumerator InitApp()
{
    yield return DownloadPatchFiles();
    WriteVersionFiles();
}

public static IEnumerator DownloadPatchFiles()
{
    var downloadSize, downloadFiles = CalcDownloadSize();   
    if ( downloadSize > diskSpace)
    {
        yield return ShowMessageBox("DiskFull");
        Application.Quit();
        yield break;
    }
    DownloadFiles(downloadFiles);
}

以上代码,在Android平台运行良好,如果磁盘不够下载,将执行Application.Quit,程序退出

正确的方法是,调用了退出后,无限期等待退出

public static IEnumerator DownloadPatchFiles()
{
    var downloadSize, downloadFiles = CalcDownloadSize();   
    if ( downloadSize > diskSpace)
    {
        yield return ShowMessageBox("DiskFull");
        Application.Quit();
        while(true) yield return null;
    }
    DownloadFiles(downloadFiles);
}

附:Android系统的退出使用了Java的退出,所以会立即闪退

try
{
    using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
    {
        using (AndroidJavaClass systemClass = new AndroidJavaClass("java.lang.System"))
        {
            AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
            currentActivity.Call("finishAffinity");
            systemClass.CallStatic("exit", 0);
            return;
        }
    }
}
catch
{
}