CountDownTimer在IntentService中不起作用

时间:2013-10-02 08:05:12

标签: android intentservice countdowntimer

我正在使用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();
}

1 个答案:

答案 0 :(得分:1)

据我所知,这归结为IntentService如何运作。基本上当你启动一个IntentService时,它会创建一个工作线程来完成它需要做的任何工作,然后它会自行终止。

一旦doWakefulWork退出,您的代码就会终止,IntentService将终止。因此,CountDownTimer将与IntentService一起终止。