0

我有一个 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);

}

当服务从我的应用程序中启动时,它执行得很好。但是当手机通过广播接收器启动后启动时,它只显示 toast 消息,仅此而已。

4

2 回答 2

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 类

于 2013-09-12T08:15:22.173 回答
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。

奇迹般有效

于 2013-09-12T08:10:40.190 回答