Android处理点击事件迟到了

时间:2012-11-15 08:06:35

标签: android button onclick delay onclicklistener

我在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();
        }
    });

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

从逻辑上思考这个问题。更有可能出现以下哪种情况?

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

或者

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

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

答案 2 :(得分:0)

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