【问题标题】:Android, performance degrading if multiple activitiesAndroid,如果有多个活动,性能会下降
【发布时间】:2012-05-12 15:59:26
【问题描述】:

我有一个基于 OpenGL 的应用程序,到目前为止一切正常。该应用由 2 个 Activity 组成,主 Activity 包含 OpenGL 视图,另外一个 Activity 包含用于某些过场动画的电影播放器​​。

在某些低端设备(例如 LG P690、Android 2.3.4)上,电影活动运行后性能会显着下降。之后,主要活动运行速度非常慢,仅达到约 30 fps 而不是 50 fps。

如果您通过按下主页按钮离开应用程序并重新启动它,您可以“修复”它再次变得更快。然后一切又好了 - 直到再次显示电影查看活动......

我做了一些测试,不管活动 #2 实际做了什么,即使它只是一个闪屏或其他什么,这种效果也会发生。如果我从不调用第二个活动,那么性能总是很高。

注意:OpenGL 活动没有多次实例化,这可能会导致类似的效果。

有人遇到过相同或类似的问题并知道补救措施吗?

【问题讨论】:

  • 也许你用来渲染电影的任何东西都使用了opengl-es?我必须承认我在一项活动中做所有事情,但这可能并不总是一个好主意:P
  • 无论活动 #2 实际做什么(即使它什么都不做),效果都会发生,因此它绝对与任何电影渲染机制无关。

标签: android performance opengl-es android-activity


【解决方案1】:

不幸的是,我缺乏声誉,无法发表评论。

我可以想象,当您从第二个返回时,您的 opengl 活动的一个新实例会启动。

您可能想提出一个特定的意图来避免这种情况。

例如,我会尝试 FLAG_ACTIVITY_CLEAR_TOP。

给开发者页面看看意图:http://developer.android.com/reference/android/content/Intent.html

所有Flag`s都列在那里并附有描述。

希望这会为您提供解决方案!

【讨论】:

  • 这是一个有效的想法,但不幸的是,这里的情况并非如此,OpenGL 活动没有多次实例化。尽管如此,还是感谢您的努力。我会相应地编辑可能的问题。
【解决方案2】:

我在我的两台设备上发现了同样的问题:

  • acer 液态金属 (android 2.3) 在我的应用程序中从 50 fps 下降到 45 fps

  • 'cube' 10.1" 平板电脑 (android 4.0) - 在我的应用中从 60 fps 下降到 30 fps

但是,我使用画布方法,将 SurfaceView 作为子项直接附加到我的 Activity。

我进行了调查,并且使用 dialog 代替活动有效。另一件似乎可行的事情是将您的活动的清单条目更改为具有如下属性:

android:theme="@android:style/Theme.Dialog"

请注意:使用这些技术中的任何一种都可以解决问题,但是您的调用活动的生命周期事件将不会像以前那样运行。 IE。 onPause 将不会被调用等。您需要将自定义代码从这些方法移动到您的对话框打开代码中。

发现和调试真的很痛苦。我希望这个问题不存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-29
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 2013-05-25
    相关资源
    最近更新 更多