如何在Android中创建定时器?

7
我有这个方法。
public void GetSMS(){
       //in this method I read SMS in my app inbox,
       //If have new SMS create notification
}

我认为可以创建一个定时器方法,每5秒调用GetSMS()。

我该如何创建一个正确的方法呢?


4
你有没有在谷歌上搜索“安卓定时器”? - Mikita Belahlazau
一个处理程序可以做到这一点,但你应该阅读有关BroadcastReceiver的内容。 - WarrenFaith
你是认真考虑每隔5秒轮询短信收件箱来判断是否有新消息吗? - njzk2
5个回答

17

这里是 Timer 和 Timer Task 的一个示例。希望这可以帮助你。

final Handler handler = new Handler();
Timer timer = new Timer(false);
TimerTask timerTask = new TimerTask() {
    @Override
    public void run() {
        handler.post(new Runnable() {
            @Override
            public void run() {
                // Do whatever you want
            }
        });
    }
};
timer.schedule(timerTask, 1000); // 1000 = 1 second.

1
我在run()块中调用了我的receiveMessage方法,但它并没有每秒被调用一次!你能帮我解决这个问题吗? - user1831490

5

使用Timer.scheduleAtFixedRate()方法,如下所示:

final Handler handler = new Handler();
Timer timer = new Timer(false);
TimerTask timerTask = new TimerTask() {
    @Override
    public void run() {
        handler.post(new Runnable() {
            @Override
            public void run() {
                GetSMS();
            }
        });
    }
};

timer.scheduleAtFixedRate(timerTask, 5000, 5000); // every 5 seconds.

5

1

1
尽管上述计时器方法是使用所需计时器的正确方式,但我相当喜欢这个小技巧:
new CountDownTimer(Long.MAX_VALUE, 5000)
{
    public void onTick(long millisUntilFinished)
    {
        // do something every 5 seconds...
    }

    public void onFinish()
    {
       // finish off when we're all dead !
    }
}.start();

Long.MAX_VALUE根据Java文档,其(有符号)值为2^63-1,大约相当于292471个千年!因此,启动其中一个倒计时定时器在相对的时间上实际上会持续永远。当然,这取决于您的间隔时间。如果您想要每秒钟一个计时器,则该计时器“仅”持续58494个千年,但在更大的方案中,我们不需要担心这个问题。


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