原生 Android 应用程序在挂起时是不是应该释放 OpenGL 资源?
Posted
技术标签:
【中文标题】原生 Android 应用程序在挂起时是不是应该释放 OpenGL 资源?【英文标题】:Should a native Android app free OpenGL resources when it is suspended?原生 Android 应用程序在挂起时是否应该释放 OpenGL 资源? 【发布时间】:2017-10-10 22:04:29 【问题描述】:我有一个关于原生 Adroid 应用程序的新手问题。应用挂起时是否应该释放 OpenGL 资源?
例如,在我的基于QT OpenGLUnderQML sampleQQuickWindow::sceneGraphInvalidated 的应用程序中,android 上从未调用过,并且该应用程序在挂起时不会释放 OpenGL 资源并且工作正常。
【问题讨论】:
【参考方案1】:释放资源的好处是,当设备处于内存压力之下时,您的应用不太可能被弹出。此外,您正在成为一个更好的公民,如果每个人都在后台释放他们的资源,那么更多的应用程序可以同时在后台保持活跃。
缺点是编写代码很麻烦,当用户返回您的应用时,您将不得不加载,这需要一些时间,并且会导致用户体验稍差。
没有免费资源的要求,在我参与的游戏中,我通常不会太担心它。我偶尔会处理一些容易实现的目标,例如释放渲染目标或清除由缓存系统管理的低优先级纹理。它可能永远不会超过 10-20% 的 OpenGL 内存占用,但我想这意味着内存很少的用户更有可能发现我的应用程序仍在运行,如果他们多任务一会儿检查他们的电子邮件或其他东西.
【讨论】:
好答案,另一个问题是为什么 QQuickWindow::sceneGraphInvalidated 在桌面上被调用,而在 Android 上没有被调用?以上是关于原生 Android 应用程序在挂起时是不是应该释放 OpenGL 资源?的主要内容,如果未能解决你的问题,请参考以下文章
应用程序在挂起时静默终止。 (用户在我的应用程序上按下锁定按钮)
当应用程序挂起时,我如何知道 NSURLSessionUploadTask 是不是正在工作?
由于 SystemEvents.OnUserPreferenceChanged 事件,WinForms 应用程序挂起