我正在使用wakefullintentservice库。 到目前为止,它在很多项目中都使用了这个库。
但在我的应用程序中知道我正在使用CountDownTimer类。我不知道为什么它不起作用。 我尝试通过它调试不启动CountDownTimer代码。 在调用 countDownTimer.start(); 之后 没有发生任何事情刚刚发布的锁称。
应该给予任何帮助。 谢谢你的到来。
请说我只想在IntentService中做一些工作,如果没有CountDownTimer可以告诉我,可以使用1秒Delay.mean。
这是我的代码
public class AppService extends WakefulIntentService {
Context ctx;
private CountDownTimer countDownTimer;
List<GCMessagingUtils> gcmessagelist;
public static final String Tag="AppService.java";
private long startTime;
int index = 0;
private final long interval = 1 * 1000;
public AppService() {
super("AppService");
}
@Override
protected void doWakefulWork(Intent intent) {
Log.e(Tag, "doWakefulWork");
OnAlarmReceiver.isSendingDataOn = true;
ctx = getApplicationContext();
DatabaseHandler db = new DatabaseHandler(ctx);
gcmessagelist = db.getAllGCMessages();
startTime = gcmessagelist.size() * 1000;
countDownTimer = new MyCountDownTimer(startTime, interval);
countDownTimer.start();
}
public class MyCountDownTimer extends CountDownTimer {
public MyCountDownTimer(long startTime, long interval) {
super(startTime, interval);
}
@Override
public void onFinish() {
OnAlarmReceiver.isSendingDataOn = false;
}
@Override
public void onTick(long millisUntilFinished) {
Log.e(Tag,"Inside OnTick");
if (index < gcmessagelist.size()) {
GCMessagingUtils gcmessage = gcmessagelist.get(index);
//Do Some Work
index++;
}
}
}
}
解决问题:
使用pskink
的解决方案希望它会帮助某人。
我只是在doWakefulWork函数结束时放置Looper.loop()所以我的代码看起来像这样。
*
*
countDownTimer = new MyCountDownTimer(startTime, interval);
countDownTimer.start();
Looper.loop()
}
在CountDownTimer完成Quit The Looper
@Override
public void onFinish() {
OnAlarmReceiver.isSendingDataOn = false;
Looper.myLooper().quit();
}
答案 0 :(得分:1)
据我所知,这归结为IntentService
如何运作。基本上当你启动一个IntentService
时,它会创建一个工作线程来完成它需要做的任何工作,然后它会自行终止。
一旦doWakefulWork
退出,您的代码就会终止,IntentService
将终止。因此,CountDownTimer
将与IntentService
一起终止。