调用unity的Application.Quit();方法退出会导致重启问题

最近测试提了一个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.CallStatic<int>("myPid");process.CallStatic("killProcess", mypid);
}
// 使用AndroidJavaClass找到UnityPlayer类using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{using (AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity")){// 获取ActivityManagerAndroidJavaObject mActivityManager = currentActivity.Call<AndroidJavaObject>("getSystemService", "activity");// 获取RunningAppProcessInfo列表AndroidJavaObject mList = mActivityManager.Call<AndroidJavaObject>("getRunningAppProcesses");AndroidJavaClass process = new AndroidJavaClass("android.os.Process");int mypid = process.CallStatic<int>("myPid");// 遍历列表并杀掉非当前进程的进程for (int i = 0; i < mList.Call<int>("size"); i++){AndroidJavaObject runningAppProcessInfo = mList.Call<AndroidJavaObject>("get", i);if (runningAppProcessInfo.Get<int>("pid") != mypid){process.CallStatic("killProcess", runningAppProcessInfo.Get<int>("pid"));}}// 最后杀掉当前进程process.CallStatic("killProcess", mypid);// 立即退出应用System.Environment.Exit(0);}
}

或者移动到后台,再杀掉进程:

AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
activity.Call<bool>("moveTaskToBack", true);
AndroidJavaClass processClass = new AndroidJavaClass("android.os.Process");
int pid = processClass.CallStatic<int>("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.GetStatic<AndroidJavaObject>("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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/837813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正则表达式和Lambda表达式的使用和区别(C++)

在C中&#xff0c;正则表达式和Lambda表达式都是强大的工具&#xff0c;分别用于不同的任务。下面是一些示例代码&#xff0c;展示了如何在C中使用正则表达式和Lambda表达式。 使用正则表达式&#xff08;C11及以上&#xff09; 在C中&#xff0c;正则表达式功能由标准库中的…

R语言:ROC分析

> install.packages("pROC") > library(pROC) > inputFile"结果.txt" > rtread.table(inputFile, headerT, sep"\t", check.namesF, row.names1) > head(rt) con treat TCGA-E2-A1L7-11A-con…

SynchronousQueue 的 常用场景及使用示例

SynchronousQueue 的 常用场景及使用示例 SynchronousQueue 是 Java 并发框架中的一个特殊类型的阻塞队列&#xff0c;它的特点是队列内部容量为零&#xff0c;即不存储元素。每个 put 操作必须等待一个对应的 take 操作&#xff0c;反之亦然&#xff0c;因此它主要用作线程间…

【论文速读】|大语言模型是零样本模糊测试器:通过大语言模型对深度学习库进行模糊测试

本次分享论文&#xff1a;Large Language Models are Zero-Shot Fuzzers: Fuzzing Deep-Learning Libraries via Large Language Models 基本信息 原文作者&#xff1a;Yinlin Deng, Chunqiu Steven Xia, Haoran Peng, Chenyuan Yang, Lingming Zhang 作者单位&#xff1a;U…

vue+vant项目0-1快速发布到--钉钉应用

uniapp开发笔记----vue开发项目配置钉钉应用 一、 vuevant开发项目1. 自定义vuevant项目或者已经有的旧项目1. 自定义vuevant项目1. 创建vue项目2. 安装依赖3. 引入所有组件4. 使用一个组件/效果和代码如下&#xff1a; 2. git官网仓库&#xff0c;直接拉默认dome代码3. 打包项…

Gone是什么—— 一个轻量的,基于Golang的,依赖注入框架

我从头到尾实现了一个Golang的依赖注入框架&#xff0c;并且集成了gin、xorm、redis、cron、消息中间件等功能&#xff1b;自己觉得还挺好用的&#xff0c;推荐给你&#xff01;也欢迎一起维护&#xff01; github地址&#xff1a;https://github.com/gone-io/gone 文档地址&am…

CTF如何学习?

CTF如何学习&#xff1f;打CTF有什么用 CTF本身有几个常见的领域 MISC WEB [逆向 密码学](https://www.zhihu.com/search?q逆向 密码学&search_sourceEntity&hybrid_search_sourceEntity&hybrid_search_extra{“sourceType”%3A"answer"%2C"sourc…

Hadoop 3.4.0+HBase2.5.8+ZooKeeper3.8.4+Hive+Sqoop 分布式高可用集群部署安装 大数据系列二

创建服务器,参考 虚拟机创建服务器 节点名字节点IP系统版本master11192.168.50.11centos 8.5slave12192.168.50.12centos 8.5slave13192.168.50.13centos 8.5 1 下载组件 Hadoop:官网地址 Hbase:官网地址 ZooKeeper:官网下载 Hive:官网下载 Sqoop:官网下载 为方便同学…

【Web前端】JavaScript基本知识

1.Javascript简介 简称JS&#xff0c;是当前最流行、应用最广泛的客户端脚本语言&#xff0c;用来在网页中添加一些动态效果与交互功能。在web开发领域有着举足轻重的地位。 2.JavaScript包含内容 核心ECMAScript(es):提供语言的语法和基本对象(数据类型、运算符、流程控制等…

TypeScript学习日志-第二十六天(weakMap,weakSet,set,map)

weakMap,weakSet,set,map 一、set set 的基本用法如下&#xff1a; 二、map map 与 set 的 区别 就是 map 的 key 可以是引用类型 object array , map 的添加时使用 set 三、weakmap weakset weakmap和weakset 都是弱项 弱引用 其键必须是引用类型&#xff0c;不能是其它类…

数据结构之图的学习

为自己复习时使用 图、树和线性表在数据结构中有显著的区别&#xff0c;主要体现在以下方面&#xff1a; 数据元素名称&#xff1a; 线性表&#xff1a;其中的数据元素被称为元素。树&#xff1a;数据元素被称为结点。图&#xff1a;数据元素被称为顶点&#xff08;Vertex&…

数组中求本元素临近下一个比它大的数(c实现)

题目描述 有一个数组&#xff0c;请找出数组中每个元素的下一个比它大的元素。 要求&#xff1a; 给定一个int数组arr以及数组大小为n&#xff0c;请返回一个int数组,代表每个元素比它大的下一个元素&#xff0c;若不存在返回-1&#xff0c;原数组中的元素都为正整数。 测试…

弹幕游戏-压力测试 Python-Locust模拟送礼物

Hey&#xff0c;读者们&#xff01;今天给大家带来一个Python性能测试的新玩法——使用Locust模拟发送礼物。是不是听起来就很酷&#xff1f;&#x1f60e; &#x1f3af;目标 想象一下&#xff0c;在直播平台上&#xff0c;你希望测试某个直播间的礼物发送功能。那么&#x…

有一个21年的前端vue项目,死活安不上依赖

在公司开发的时候遇到的一个很玄幻的问题,这个项目是21年开发的,现在我是24年中途二开增加新功能 这个项目经过多人之手,现在已经出现了问题------项目依赖安不上,我能启动完全是因为在23年的时候写这个项目的时候将依赖费九牛二虎之力下载好后打成了压缩包发给另外一个安不上依…

Qt学习笔记1.3.3QtCore-隐式共享

文章目录 概述隐式共享细节类列表 Qt中的许多c类使用隐式数据共享来最大化资源使用并最小化复制。隐式共享类作为参数传递时既安全又高效&#xff0c;因为只传递指向数据的指针&#xff0c;并且只有当函数写入数据时才会复制数据&#xff0c;即写时复制(copy-on-write)。 概述 …

【Node.js】事件循环

Node.js 中的事件循环是基于单线程的异步非阻塞模型。它是 Node.js 的核心机制&#xff0c;用于处理非阻塞的 I/O 操作和异步事件。 1. Node.js 事件循环介绍 Node.js 的事件循环是一个 Event Loop&#xff0c;通过异步回调函数的方式实现非阻塞的处理。事件循环会在主线程上…

代码随想录算法训练营第三十九天| 62.不同路径 63. 不同路径 II

62.不同路径 题目链接 解题方法 1.确定dp[i][j]及下标的含义&#xff1a;dp[i][j]表示到达目的地的路径数&#xff0c;i表示行,j表示列 2.确定递推公式dp[i][j]dp[i-1][j]dp[i][j-1] 3.初始化&#xff1a;第一行和第一列 4.确定遍历顺序&#xff1a;从上往下和从左向右…

信创替代后的设备处置

信创替代后的设备处置 在信创项目中替换下来的设备&#xff0c;如果从技术层面讲还具有较高的应用价值&#xff0c;如何处置呢&#xff1f; 一、数据处置 信创适配完成后&#xff0c;这些被替换下来的服务器上有大量的数据&#xff08;包括结构化和非结构化&#xff09;&…

NSSCTF中的1zjs、作业管理系统、finalrce、websign、简单包含、Http pro max plus

目录 [LitCTF 2023]1zjs [LitCTF 2023]作业管理系统 [SWPUCTF 2021 新生赛]finalrce exec()函数&#xff1a;php中exec介绍及使用_php exec-CSDN博客​​​​​​ 资料参考&#xff1a;RCE(远程命令执行)绕过总结_rce绕过-CSDN博客 [UUCTF 2022 新生赛]websign [鹏城杯 …

Flink面试整理-如何提高Flink处理数据的效率和吞吐量

提高 Apache Flink 处理数据的效率和吞吐量通常涉及对配置、代码设计和资源管理的优化。以下是一些关键的策略: 1. 优化并行度 调整并行度:并行度应根据可用的硬件资源(如 CPU 核心数)进行调整。不同的算子可以有不同的并行度。确保数据均衡分配:避免某些任务过载而其他任…