英语网站的栏目名称,wordpress的子主题,简单网站建设软件有哪些,深圳有实力的优化公司最近测试提了一个bug#xff0c;游戏退出会导致游戏重启 我发现我们是直接调用的unity自带的方法#xff1a; Application.Quit(); 但是我使用demo工程#xff0c;调用这个是正常的#xff0c;摸不着头脑
尝试使用安卓方法#xff1a;
using (AndroidJavaClass system…最近测试提了一个bug游戏退出会导致游戏重启 我发现我们是直接调用的unity自带的方法 Application.Quit(); 但是我使用demo工程调用这个是正常的摸不着头脑
尝试使用安卓方法
using (AndroidJavaClass systemClass new AndroidJavaClass(java.lang.System))
{systemClass.CallStatic(exit, 0);
}using (AndroidJavaClass process new AndroidJavaClass(android.os.Process)
{int mypid process.CallStaticint(myPid);process.CallStatic(killProcess, mypid);
}// 使用AndroidJavaClass找到UnityPlayer类using (AndroidJavaClass unityPlayer new AndroidJavaClass(com.unity3d.player.UnityPlayer))
{using (AndroidJavaObject currentActivity unityPlayer.GetStaticAndroidJavaObject(currentActivity)){// 获取ActivityManagerAndroidJavaObject mActivityManager currentActivity.CallAndroidJavaObject(getSystemService, activity);// 获取RunningAppProcessInfo列表AndroidJavaObject mList mActivityManager.CallAndroidJavaObject(getRunningAppProcesses);AndroidJavaClass process new AndroidJavaClass(android.os.Process);int mypid process.CallStaticint(myPid);// 遍历列表并杀掉非当前进程的进程for (int i 0; i mList.Callint(size); i){AndroidJavaObject runningAppProcessInfo mList.CallAndroidJavaObject(get, i);if (runningAppProcessInfo.Getint(pid) ! mypid){process.CallStatic(killProcess, runningAppProcessInfo.Getint(pid));}}// 最后杀掉当前进程process.CallStatic(killProcess, mypid);// 立即退出应用System.Environment.Exit(0);}
}或者移动到后台再杀掉进程
AndroidJavaObject activity new AndroidJavaClass(com.unity3d.player.UnityPlayer).GetStaticAndroidJavaObject(currentActivity);
activity.Callbool(moveTaskToBack, true);
AndroidJavaClass processClass new AndroidJavaClass(android.os.Process);
int pid processClass.CallStaticint(myPid);
processClass.CallStatic(killProcess, pid);以上方法在demo都可以使用并成功退出但是在项目上就是不行。。。然后我就找到大佬的指引了 https://cloud.tencent.com/developer/article/2248532 如果当前进程处于前台 , 杀死该进程后 , Android 系统会重启该进程 , 这是 Android 系统本身的机制 ; activity.finishAffinity(); 上述代码可以关闭所有的本任务栈内的 Activity 窗口界面 , 自然就可以杀死本进程 ; 如果想要杀得更彻底 , 使用该方法与上面的两种杀进程的方法结合使用 ; 杀死前台进程 , 将所有的 Activity 关闭 , 然后调用 android.os.Process.killProcess(android.os.Process.myPid()) 或 java.lang.System.exit(0) 中的一种方法即可 ; 重点加粗 关闭 Activity 建议使用 Activity 类的 finishAffinity() 方法 , 该方法可以关闭当前前台任务栈中的所有 Activity , 之后再调用上述两个杀进程的方法 , 即可成功关闭进程 , 应用不会重启 ; 然后
#if UNITY_ANDROID !UNITY_EDITOR// 使用AndroidJavaClass找到UnityPlayer类try{using (AndroidJavaClass unityPlayer new AndroidJavaClass(com.unity3d.player.UnityPlayer)){using (AndroidJavaClass systemClass new AndroidJavaClass(java.lang.System)){AndroidJavaObject currentActivity unityPlayer.GetStaticAndroidJavaObject(currentActivity);currentActivity.Call(finishAffinity);systemClass.CallStatic(exit, 0);}}}catch (Exception ex){if (ex ! null){Debug.LogWarning(QuitGame: ex);}Application.Quit();}
#elseDebug.LogWarning(退出游戏Application.Quit() 2);Application.Quit();
#endif终于可以正常退出游戏不重启了QAQ