私のアプリはアラームタイマーを使用して2分ほどごとにサーバー上のアップデートを確認します。私はこれを使用して定期的なタイマーを作成します:私のアンドロイドのアラームはキャンセルされていて、私のものではありません
alarmIntent = new Intent(context, OnWakeUpReceiver.class);
PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 120000, pIntent);
多くの人にとって、これはうまくいきます。しかし、少数の人々は、アプリが突然それ自体の更新を停止すると報告しています。私はタイマーが存在するかどう見て簡単なチェックを入れ:アプリは、もはや何のタイマーがないことを示す、この戻りヌルを、更新されたときに
PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_NO_CREATE);
と案の定、まだ存在しません。
私のアプリはアラームタイマーを制御していました(ネットワークに接続されていないときに電源を切ってから、もう一度オンにしたときなど)。たぶん私はそれをオフにして、それを元に戻さないと思った。だから私はアラームタイマーをキャンセルするすべての呼び出しを削除したバージョンを作成しました。だから私のアプリはもはやそのタイマーをキャンセルする手段がありません。しかし、わずか数日後にもう一度アラームタイマーは表示されなくなり、アプリは更新されません。
自分のシステムでこれを実行することができなかったか、誰かにそれを繰り返すための絶対的な方法が見つかっていませんでした。おそらくAndroidシステムがそれをキャンセルしていたのかどうかは疑問に思っていましたが(それは私のアプリが再び働くことを止めるでしょうが)、より多くの問題システムの1つでは、
タスク・キラーがアラーム・タイマーを殺すかどうかはわかりませんでしたが、私はSDK 8と思うとタスク・キラーがこれをやり直すことができず、ポスト・バージョン8また、タスクキラーを実行していないシステムにも根ざしていません。
私は、メインのアプリタイマーが更新を停止したかどうかを確認して確認するためだけに受信機を走らせる「ウォッチドッグ」アラームタイマーを作成しました。私が見つけたのは、そのタイマーもキャンセルされていたことです(これは、「最後に実行された」アップデートを与えず、メインアプリが停止したことに気付かなかったということです)。
この問題は私のためのアプリキラーです。誰でも何時でも試してデバッグする方法を提案できますか?何が起きていますか?システムによって何か他の方法でタイマーがキャンセルされたときに、システムによってログエントリが作成されましたか?私はそれがトレースなしで蒸発するだけであることが嫌いです。
デバイスの電源を入れ直してもアラームが表示されますか? –
私は決してチェックしませんでしたが、電話が起動するたびにアラームタイマーを作成しなければならないと仮定しました。私はそれを行うOnBoot受信機を持っています。 – Rob
誰かがデータプランを外して、サーバーに接続できない場合や、正常に失敗して別のアラームを作成した場合、ワイヤレスでアプリがクラッシュする可能性がありますか? –