我有一个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);
}
当从我的应用程序中启动服务时,它会正常执行。但是当在广播接收器启动电话后启动它时,它只显示吐司消息而已。
答案 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类