【问题标题】:How do I get an Android service to broadcast an intent every few seconds?如何让 Android 服务每隔几秒广播一次意图?
【发布时间】:2013-04-17 02:25:35
【问题描述】:

如果我创建了一项服务,如何让它每 X 秒广播一次意图?我记得看到过一段 sn-p 代码

startThreadDelayed( new Thread() {
    public void run() {
        doStuff();
        sendBroadcast(messageIntent);
        startThreadDelayed(this, 1000);
    }
}, 1000);

不幸的是,对于循环中的任何内容,我都不确定类名或确切的方法名。只需一个名字就能为我指明正确的搜索方向。

【问题讨论】:

    标签: android service asynchronous


    【解决方案1】:

    您可以使用Handler.postDelayedHere is the documentation.

    举例

    Handler h = new Handler();
    YourClass yourRunnable = new YourClass();
    h.postDelayed(youRunnable,1000);
    
    
    public class YourClass implements Runnable{
        public void run(){
        doStuff();
        sendBroadcast(messageIntent);
        if(running)
            h.postDelayed(youRunnable,1000);
    }
    

    这里 running 是一个标志,最好将其保持为 volatile 布尔值。因此,通过更改它的值,您可以停止重复。

    【讨论】:

    • 谢谢,这是我想象中的处理程序。
    • 我已经用一个例子更新了我的答案。但也有其他方法可以做到这一点
    • 如果你有任何链接,我也会采取更好的方式来做事!
    • 我发布了答案,因为我认为这是更好的方法.. 除此之外,您可以使用 Timer 或 Thread.sleep 使用相同的逻辑。但如果我是你,我会使用 Handler
    • 您可以在 postDelayed 中创建匿名用户 Runnable。但在这种情况下,每次调用 postdelayed 时都会创建一个新实例。
    【解决方案2】:

    您可以考虑使用AlarmManager。 通过使用它,您可以一次性触发任何Intent,也可以按任何时间表重复触发。

    例如:

    Intent i = new Intent(this, YourReceiver.class);
    PendingIntent broadcast = PendingIntent.getBroadcast(this, 0, i, 0);
    
    long first = System.currentTimeInMillis(); // now
    long interval = 5 * 1000; // every 5 seconds
    AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
    am.setRepeating(AlarmManager.RTC, first, interval, broadcast);
    

    【讨论】:

    • 这不是我的想法,但它仍然是一个很好的答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 2010-12-17
    • 1970-01-01
    相关资源
    最近更新 更多