4

wakefullintentserviceライブラリを使用しています。これまでのところ、完全に機能していましたが、このライブラリを多くのプロジェクトで使用しました。

しかし、私のアプリケーションでは CountDownTimer クラスを使用していることを知っています。なぜそれが機能していないのかわかりません。CountDownTimerコードを開始していないことでデバッグしようとしています。countDownTimer.start();を呼び出した後。 呼び出されたロックを解放しただけで何も起こりませんでした。

どんな助けでも感謝されるべきです。よろしくお願いします。

親切に、1秒の遅延でIntentServiceでいくつかの作業をしたいだけです.CountDownTimerなしでダウンできるかどうかを意味します教えてください..

これが私のコードです

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();
}
4

1 に答える 1

1

私が知る限り、これは がどのように機能するかにかかってIntentServiceいます。基本的に、起動するIntentServiceと、必要な作業を実行するワーカー スレッドが作成され、自己終了します。

あなたのコードでは、終了するとすぐにdoWakefulWork終了しIntentServiceます。その結果、あなたCountDownTimerは とともに終了しますIntentService

于 2013-10-02T08:39:36.410 に答える