1

我正在 Android 中编写一个相当简单的应用程序,大部分代码都在处理漂亮的动画以使其看起来不错。

我的问题是有时单击一个按钮,但只有在单击另一个按钮后才调用来自 onClick 侦听器的相关 onClick() 。

它表明Android正在“缓冲”事件并分组处理它们,而不是在它们生成时处理它们。

有没有人遇到过这个问题,或者可以提出解决方案?

我不确定它是否重要,但我通常使用匿名对象作为我的听众,这对我来说更有意义。

        score.setVisibility(VISIBLE);
    score.setClickable(true);
    score.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            soundEffect.soundForId(SoundEffect.DELETE_SOUND);
            player.setToRmove(true);

                            //Toggle trash button to replace the score button and
                            // identify for the user that this player is due to be deleted
            score.setVisibility(GONE);
            score.setClickable(false);
            trashButton.setVisibility(VISIBLE);
            trashButton.setClickable(true);
            trashButton.invalidate();
        }
    });
4

3 回答 3

0

我不知道这种事件的“分组”。当然,事件是从队列中处理的,正如 Simon 建议的那样,您可能在某些时候在 UI 线程上做的太多而您阻塞了它。

于 2012-11-15T08:56:36.157 回答
0

我曾经在一个项目中遇到过同样的问题。我正在播放大约 2-3 秒长的射击声音,但如果有人经常点击它,它会将事件分组。我通过在每次按下拍摄按钮后将其禁用 2 秒来解决该问题。希望它可以帮助你。

于 2012-11-15T08:10:44.770 回答
0

从逻辑上思考这个问题。以下哪种情况的可能性更大?

Android 有一些代码可以监控 UI 生成事件的速度。如果它发现您生成它们的速度足够快,它就会开始将它们批处理在一起。问题。快是什么意思?需要做哪些假设?我为什么要写这么疯狂的代码?

或者

由于您的匿名内部类的实例是在引发事件时创建的,并且这些实例在单个线程上执行,您的主 UI 线程,Android 将执行这些实例的消息放置到线程的消息队列中。问题?

如果您的主线程上运行的代码不是微不足道的并且通常与更新 UI 无关,那么请使用另一个线程(例如 AsyncTask)来执行代码。对于需要 2-3 秒的事情,你绝对应该这样做。

于 2012-11-15T08:20:08.377 回答