Tal*_*nel 25 android kill-process unity-game-engine
我读过一些帖子说使用这种方法"不好",不应该使用,这不是"关闭"应用程序的正确方法,而不是android的工作方式......
我理解并接受这样一个事实,即在正确的时间终止这个过程时Android OS比我更清楚,但我没有听到一个很好的解释为什么使用这个killProcess()
方法是错误的?毕竟 - 它是android API的一部分......
我所知道的是,调用此方法时,其他线程正在执行潜在的重要工作(对文件的操作,写入数据库,HTTP请求,运行服务......)可以在中间终止,而且显然不是很好.此外,我知道我可以从"重新打开"应用程序将更快的事实中受益,因为系统可能仍然从上次使用时"保持"在内存状态,并killProcess()
防止这种情况.
除了这个原因,假设我没有这样的操作,而且我不在乎我的应用程序会从头开始每次运行,还有其他原因为什么不使用这个killProcess()
方法?
我知道关闭一个Activity的finish()方法,所以请不要写我这个...
finish()
仅供参考Activity
.不是所有应用程序,我想我确切知道为什么以及何时使用它...
还有一件事 - 我正在使用Unity3D框架开发游戏,并将项目导出到android.当我反编译生成的apk时,我非常惊讶地发现java源代码是从Unity创建的 - 实现Unity的finish()
方法,用Activity
.
Application.quit()
假设是根据Unity3d指南关闭游戏的正确方法(它真的吗?也许我错了,并且错过了一些东西),那么Unity的框架开发人员如何做得非常好,因为它似乎实现了这个原生android到Process.killProcess(Process.myPid())
?
Rus*_*uss 13
<rant>
在完美的世界中,使用完美的代码和库,您不需要调用Process.killProcess(Process.myPid())
,操作系统将正确地杀死您的应用程序.中东也会有和平,猪会飞,停止问题也将得到解决.
因为所有这些事情还没有发生,有时你需要执行这样的'禁止'代码.
最近,对于我制作的Android游戏,免费版使用了一个广告库,可以保持应用程序存活并且还会泄漏内存.付费版本没有此问题,因为没有链接的广告库.我的解决方案是在主菜单上添加一个执行此类代码的退出按钮.我的希望是,大多数人在完成后会点击此按钮,我不必担心它会占用内存.我刚刚执行的付费版本finish()
已完成.(这是在谷歌的应用程序内购买之前可用的,所以我必须制作一个付费和免费版本,他们可能已经修复了这个问题,我可以更新所述游戏,但它确实没有做得太好,我怀疑花在它上面的任何时间都是值得的)
它有点像小学/初中,他们告诉你,你不能拿负数的平方根.然后他们会在更高级别的代数课程中说...你可以采用负数的平方根,但你会得到奇怪的结果,但它是一致的并且解决了问题.
换句话说,除非您知道自己在做什么,否则不要执行"禁止"代码.
</rant>
好吧,Unit3d最有可能使用本机代码,他们将这个过程视为一种保险 - 他们不想泄漏内存.你可以争辩这是不是一个好主意,但他们使用它的事实并不意味着你也应该这样做.
也许在某些极端情况下您会想要使用killProcess()
,但通常操作系统会根据当前的负载和使用情况为您执行此操作.不确定你正在寻找什么样的答案 - 你知道使用killProcess()
可能会破坏东西,除非你可以证明它的用法,不要使用它.
谁说调用Process.killProcess(Process.myPid())是个坏主意?
是的,让操作系统管理自己的内存对于您和使用您的应用程序的用户来说都是最佳做法(再次打开速度更快,关闭力量的机会更少等等).
但是,假设您确定您没有中断线程或其他后台操作并且您使用此调用onDestroy()
- 我认为没有理由不使用它.特别是当它是API调用而不是解决方法时,谷歌没有提到最好不要在API文档中使用它.
归档时间: |
|
查看次数: |
12897 次 |
最近记录: |