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,程序退出
但是在iOS上运行,会发现会继续执行 yield break; 然后执行WriteVersionFiles(); 导致新的版本号被错误地写入;
正确的方法是,调用了退出后,无限期等待退出
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
{
}
CopyRights: The Post by BY-NC-SA For Authorization,Original If Not Noted,Reprint Please Indicate From 老刘@开发笔记
Post Link: Unity的Application.Quit退出函数-平台差异导致的Bug
Post Link: Unity的Application.Quit退出函数-平台差异导致的Bug