在android中安排任务

时间:2013-09-12 08:00:24

标签: android service timer

我有一个Android服务,我想在一定时间间隔执行一些任务。我选择使用一个调度程序。在我的服务的创建方法我实现了调度程序。但是,调度程序方法中的代码确实如此。不执行。这是我的实施。,我哪里错了?

    public void onCreate() {
    super.onCreate();

    Toast.makeText(this, "Share Service created...", Toast.LENGTH_LONG)
            .show();
    // getSharePrices();
    ScheduledExecutorService scheduler = Executors
            .newSingleThreadScheduledExecutor();

    scheduler.scheduleAtFixedRate(new Runnable() {
        public void run() {
            getSharePrices();
            checkWatchList();
            Log.i(tag, "Service created...");
            checkWatchList();
        }
    }, 5, 10, TimeUnit.SECONDS);

}

当从我的应用程序中启动服务时,它会正常执行。但是当在广播接收器启动电话后启动它时,它只显示吐司消息而已。

2 个答案:

答案 0 :(得分:0)

您应该查看 CWAC-WakefulIntentService

按照其网站上的说明操作时,您可以执行以下操作:

        WakefulIntentService.scheduleAlarms(new UpdateStateListener(),
                this, true);

和UpdateStateListener:

public class UpdateStateListener implements WakefulIntentService.AlarmListener {

private long oneminute = 1000 * 60; 

public void scheduleAlarms(AlarmManager mgr, PendingIntent pi, Context ctxt) {
    mgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,  SystemClock.elapsedRealtime()+oneminute, oneminute, pi);
}

public void sendWakefulWork(Context ctxt) {
    WakefulIntentService.sendWakefulWork(ctxt, UpdateStateService.class);
}

public long getMaxAge() {
    return oneminute*2;
}

}

此示例每分钟调用一次UpdateStateService。

像魅力一样工作

答案 1 :(得分:0)

试试这个:

ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleWithFixedDelay(new Runnable() {
        public void run() {
            getSharePrices();
            checkWatchList();
            Log.i(tag, "Service created...");
            checkWatchList();
        }
    }, 5, 10, TimeUnit.SECONDS);

首先在5秒后执行,然后每10秒执行一次。

或者您可以使用Timer类