安卓:定时器/延迟的替代方案

4
我希望让一张图片在显示60毫秒后消失,然后让另一张图片做同样的事情,以此类推。我认为我没有正确使用计时器,因为当我运行应用程序时,两张图片同时出现,并且在按下使用此功能的按钮时不会消失。
以下是一些示例代码:
timer.schedule(new TimerTask()
        {
            @Override
            public void run()
            {
                LED_1.setVisibility(View.VISIBLE);
                                    // LED_1 is an ImageView
            }
        }, 60);
        LED_1.setVisibility(View.INVISIBLE);

timer2.schedule(new TimerTask()
        {
            @Override
            public void run()
            {
                LED_2.setVisibility(View.VISIBLE);
                                    // LED_2 is an ImageView
            }
        }, 60);
        LED_2.setVisibility(View.INVISIBLE);

有其他的替代方案吗?我尝试了这些例子,例如:Android app How to delay your Service start on phone boothttp://www.roseindia.net/java/beginners/DelayExample.shtml,但它们并没有做到我想要的效果。我是否做错了什么?或者是否有其他的方法可以实现这个功能?谢谢。-Faul For Good.Dima..
            int delayRate = 60;
        final Runnable LED_1_On = new Runnable()
    {
        public void run()
        {
            LED_1.setVisibility(View.VISIBLE);
                    handler.postDelayed(this, delayRate);

        }
    };

    handler.postDelayed(LED_1_On, delayRate);

    final Runnable LED_2_On  = new Runnable()
    {
        public void run()
        {
            LED_1.setVisibility(View.INVISIBLE);
            LED_2.setVisibility(View.VISIBLE);
                    handler3.postDelayed(this, delayRate);

        }
    };

    handler.postDelayed(LED_2_On, delayRate);

可能是重复问题 - http://stackoverflow.com/questions/2005656/android-timer-swing - mre
3个回答

2
您可以尝试使用Handler,它可以将内容发布到UI线程,并且可以延迟发布。详情请参考postDelayed

1
当你使用处理程序时,请记得在 onPause 中取消回调 :-) - Ravi Vyas
嗨,我正在研究Handler,但我不确定如何实现它。我一直在阅读Android开发者参考页面和一些示例代码,但我不确定如何将我已有的内容转换为使用Handlers。 - faul
Example - Dmitri Gudkov
谢谢提供示例,我尝试了一下,但是现在当我按下按钮时,它只显示最后一个图像为VISIBLE,而不是第一个图像。请查看我原始帖子中的代码片段。 - faul
现在第一个LED开始闪烁 o_O - faul

0
问题在于两个计时器都有60毫秒的延迟,在它们的run方法中你把它们都设为可见。你需要改变其中一个run方法,将其设为不可见。

好的,我现在试试看。但是有一个问题...因为我必须在运行后加上一个以毫秒为单位的延迟数字,这是否意味着 ImageView 会在 60 毫秒内“不可见”? - faul
好的,我尝试了你说的,现在第一个LED根本就不会变得“可见”了。 - faul

0
你正在创建两个事件,它们都会在60毫秒后触发。
相反,你可以将第一个事件设置为在60毫秒后触发,第二个事件在120毫秒后触发,或者让第一个事件在运行后60毫秒触发第二个事件的提交。

对于LED_2,我尝试了放置120毫秒的延迟,但问题仍然存在。 - faul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接