如何每15分钟重复一次操作

时间:2013-10-03 07:00:05

标签: java android

我知道问题被问过几次,但我仍然不明白。 实现这种操作的正确方法是什么 - 例如从网上下载一些数据,例如每15分钟一次。我想在重启android之后运行此操作(无需用户启动应用程序)。 我应该只使用AlarmManager +广播接收器或AlarmManager +服务(IntentService?)还是什么? :)

5 个答案:

答案 0 :(得分:2)

要在15分钟后执行任务,您可以使用AlarmManager
由于您需要在重新启动后继续操作,因此需要额外的启动接收器。

所以你的代码如下所示

1.计划在应用程序启动时每15分钟发出一次警报。您的警报可以启动服务以执行您需要执行的任务。

2.再次接收BootReceiver,您必须安排警报。

答案 1 :(得分:0)

我认为您最好的选择是使用AlarmManager

  

此类提供对系统警报服务的访问。这些允许   你安排你的应用程序在运行中的某个时刻运行   未来。当闹钟响起时,已注册的意图   因为它是由系统广播,自动启动目标   应用程序,如果它尚未运行。注册的警报是   在设备处于睡眠状态时保留(并且可以选择唤醒设备)   设备如果在那段时间内关闭,但如果它会被清除   关闭并重新启动。

有关详细信息,请查看AlarmManager的文档或参阅此blog post以了解其实施方式

答案 2 :(得分:0)

还可以选择ScheduledExecutorService

像这样:

private ScheduledExecutorService scheduler;

...

        scheduler = Executors.newSingleThreadScheduledExecutor();

        scheduler.scheduleAtFixedRate(new Runnable()
        {
            public void run()
            {
                // do your stuff
            }
        }, 0, 15, TimeUnit.MINUTES);

答案 3 :(得分:0)

// try this
 Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        // write your code here
                    }
                });
            }
        },0,9000000);

// when no longer required call 
   timer.cancel();

答案 4 :(得分:-1)

只需使用TimerTask在特定时间间隔内重复播放。

//Declare the timer
Timer t = new Timer();
//Set the schedule function and rate
t.scheduleAtFixedRate(new TimerTask() {

    @Override
    public void run() {
        // Call your service or broadcasting or whatever here that is going to be repeated.
        //Called each time when 1000 milliseconds (1 second) (the period parameter)
        // Here you can specify that this action repeat after whatever time.
    }

},
//Set how long before to start calling the TimerTask (in milliseconds)
0,
//Set the amount of time between each execution (in milliseconds)
1000);