gpt4 book ai didi

java - Android:动态壁纸应用程序中的性能 'hickups'

转载 作者:行者123 更新时间:2023-12-01 05:34:08 24 4
gpt4 key购买 nike

我正在编写的动态壁纸应用程序遇到一些问题。

我使用 OpenGL 1.0 进行渲染。总的来说,我得到的性能相当不错。在 Samsung Galaxy S2 (2.3.4) 上,我可以获得 60 FPS,没有帧限制。

但是,我有时会收到一些比其他帧大得多的帧(假设正常帧为 33 毫秒,尖峰帧约为 70-100 毫秒)。这种情况定期发生,大约每秒一次。

我的代码对每一帧进行完全相同的处理,因此这种行为是异常的。看起来我的线程由于某种原因被操作系统交换/延迟,或者只是虚拟机在某个时刻开始执行速度变慢。

速度减慢并不是由于 GPU 处理造成的,因为 eglSwapBuffers 永远不会等待。我也非常确定我的进程不会导致 GC 运行,因为我确保循环中没有任何短暂存在的对象(在 DDMS 分配跟踪器中验证)。

有趣的是,如果我将手指放在屏幕上,帧时间中的峰值往往会变得相当小。就好像操作系统因此提高了进程的优先级一样。

解决这个问题非常重要,因为当出现峰值时我的动画看起来非常糟糕。

其他人也遇到过同样的问题吗?任何有关可能导致问题的原因的提示也将不胜感激。

最佳答案

看来你是对的。作为动态壁纸,您不应成为唯一的 Activity 线程,因此每当另一个应用程序需要执行其操作时,您都会遇到延迟。据我所知,你无法控制这一点。在我的一个应用程序中,最糟糕的是当我收到一封电子邮件时,我会卡住半秒。就您而言,定期间隔使我认为另一个进程每秒左右检查一些内容。有时您会在 logcat 中得到提示,每次都会出现一个重复的过程。

我对此没有解决方案,但是有一点帮助(取决于动画的性质 - 假设您使用每个帧作为时间步进行动画制作,如果没有,抱歉)是使用实际的最后一帧与当前帧之间耗时。任何尖峰都会“卡住”显示,但不会卡住动画。这很微妙,但有时可能就足够了。

关于java - Android:动态壁纸应用程序中的性能 'hickups',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8456778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com