gpt4 book ai didi

Android: GC_FOR_MALLOC 由长时间的触摸事件引起?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:13:15 25 4
gpt4 key购买 nike

我一直在阅读和研究 touchEvents,主要是因为当有一个冗长的触摸/滑动事件或许多触摸事件时,我的 GC 会爆炸。如果我不触摸手机,它就会闲置为 ~5 个对象,正如您从我从 DDMS 执行的前几个 GC_EXPLICIT 中看到的那样。然后我开始触摸屏幕并四处滑动,对象激增了大约 13513 个对象,实际上导致了 GC_FOR_MALLOC,耗时超过 100 毫秒。这是我的简单测试代码,下面是 dalvicvm 标签的日志。如果您有解决方法或原因的文档,或者甚至可能只是对此进行了另一次深入讨论,我将非常感谢!干杯,祝您在自己的努力中好运。

[代码]

    public class testClass extends Activity implements IOnSceneTouchListener{   
int numberOfTouches = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
}

@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
numberOfTouches++;
return false;
}

}

[logcat]

06-28 15:24:55.317: DEBUG/dalvikvm(2501): GC_EXPLICIT freed 5 objects / 128 bytes in 53ms
06-28 15:24:55.903: DEBUG/dalvikvm(2501): GC_EXPLICIT freed 5 objects / 136 bytes in 59ms
06-28 15:24:56.708: DEBUG/dalvikvm(2501): GC_EXPLICIT freed 5 objects / 128 bytes in 59ms
06-28 15:25:06.614: DEBUG/dalvikvm(2501): GC_EXPLICIT freed 6 objects / 168 bytes in 58ms
06-28 15:25:09.833: DEBUG/dalvikvm(2501): GC_EXPLICIT freed 7 objects / 192 bytes in 65ms
06-28 15:25:14.270: DEBUG/dalvikvm(2501): GC_EXPLICIT freed 8 objects / 232 bytes in 59ms
06-28 15:25:18.294: DEBUG/dalvikvm(2501): GC_EXPLICIT freed 6 objects / 160 bytes in 59ms
06-28 15:25:33.942: DEBUG/dalvikvm(1103): GC_FOR_MALLOC freed 13513 objects / 1403264 bytes in 121ms
06-28 15:26:53.684: DEBUG/dalvikvm(2139): GC_EXPLICIT freed 140 objects / 6960 bytes in 99ms
06-28 15:26:58.731: DEBUG/dalvikvm(1215): GC_EXPLICIT freed 668 objects / 71136 bytes in 117ms
06-28 15:27:31.637: DEBUG/dalvikvm(1103): GC_FOR_MALLOC freed 13962 objects / 1504296 bytes in 122ms
06-28 15:27:44.723: DEBUG/dalvikvm(2501): GC_EXPLICIT freed 63 objects / 2152 bytes in 59ms
06-28 15:27:46.676: DEBUG/dalvikvm(2501): GC_EXPLICIT freed 5 objects / 128 bytes in 65ms
06-28 15:27:47.238: DEBUG/dalvikvm(2501): GC_EXPLICIT freed 5 objects / 128 bytes in 58ms

我还没有真正解决这个问题,但偶然发现了这篇关于这个问题的好文章:Android Touch Problems

[编辑]正如 stracka 所说,这很可能是由于洪水造成的。然而,我真正的问题是对每个事件进行的分配?有没有办法重用这些事件/对象来限制由于触摸而产生的分配?

我目前正在使用 andEngine,并且 touchEvents 被合并在一起,因此应该最多有 ~5 个从头开始分配;否则他们只是重复使用不是吗?

感谢您的任何想法....

最佳答案

您使用的是旧版 Android 吗?我刚刚在 Beginning Android Games 中读到 Android 1.5 上的“触摸事件泛滥”问题。作者的解决方法是让 UI 线程在他的 onTouch() 处理程序中短暂休眠,以限制接收到的事件数。我不知道该解决方案的可行性如何,或者对您是否有用;本书的相关页面可以在这里找到:

Beginning Android Games, page 131

关于Android: GC_FOR_MALLOC 由长时间的触摸事件引起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6512225/

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