0

我知道这个问题被问了几次,但我还是不明白。实现这种操作的正确方法是什么 - 例如每 15 分钟从网络下载一些数据。即使在重新启动 android 后(无需用户启动应用程序),我也想运行此操作。我应该只使用 AlarmManager + Broadcast Receiver 还是 AlarmManager + Service (IntentService?) 还是什么?:)

4

5 回答 5

2

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

所以你的代码流程如下

1.安排闹钟在您的应用程序启动时每 15 分钟触发一次。您的闹钟可以启动一项服务来执行您需要执行的任何任务。

2.再次启动BootReceiver的OnReceived,您必须安排您的警报。

于 2013-10-03T07:08:46.047 回答
1

还有一个选项ScheduledExecutorService

像这样:

private ScheduledExecutorService scheduler;

...

        scheduler = Executors.newSingleThreadScheduledExecutor();

        scheduler.scheduleAtFixedRate(new Runnable()
        {
            public void run()
            {
                // do your stuff
            }
        }, 0, 15, TimeUnit.MINUTES);
于 2013-10-03T07:10:01.177 回答
0

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

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

有关更多详细信息,请查看AlarmManager的文档或参考此博客文章以了解它是如何实现的

于 2013-10-03T07:09:40.707 回答
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();
于 2013-10-03T07:15:20.687 回答
-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);
于 2013-10-03T07:05:42.490 回答