开发者

Proper way to get a Recurring Callback on the UI thread

I would like to get a recurring call back to invalidate a view. I am sure there is a neat way to do this. I am currently doing this and would like a neater / better solution if possible?

new Thread()
    {
        @Override
        public void run()
        {
            while (!Thread.currentThread().isInterrupted())
            {
                handler.post(new Runnable()
                {
                    public void run()
                    {
                        BannerButton.this.invalidate();
                    }
                });
                try
                {
                    Thread.sleep(50); // yield开发者_如何学运维s 20 fps
                } catch (InterruptedException e)
                {
                    Thread.currentThread().interrupt();
                }
            }
        }
    }.start();

For a single shot timer on the UI thread, I do this: (But I cant find a way to do this with repeats)

(new Handler()).postDelayed(new Runnable()
    {
        @Override
        public void run()
        {
            // Do stuff
        }
    }, SPLASH_SHOW_TIME);

Timer looked good, but it calls on a background thread.

Thanks.


Your second try using Handler is already correct. Just store the Handler and the Runnable in a field, and then inside the run() method (possibly at the end), call again

handler.postDelayed(runnable, 1000); 


Look at the View.postInvalidate() method. This is different from invalidate() as you can do it from any Thread you want. It just posts an invalidate() message in the UI thread Looper

Concerning your second question simply post with some delay the same Runnable at the end of the Runnable in your Handler

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜