1

私はアラームアプリケーションを持っています。受信機のライフサイクルとWakeLockの使い方は大体知っています。

しかし今日、私は非常に奇妙なログを送ってきたユーザーから連絡を受け、自分で電話のロックを解除するまでアラームが開始されなかったと不平を言いました. 以前は、受信機が作業を完了した後、アクティビティが開始される前に電話がスリープ状態に戻るという問題がありましたが、受信機で WakeLock を作成すると問題が解決したようです。少なくとも今日まで - ユーザーが自分で電話のロックを解除するまで、 onReceive メソッドはまったく呼び出されなかったようです。

事実:

  • 初めて聞いたケースです
  • ユーザーに数回発生しましたが、毎回ではありません
  • ログは、SQLite データベースにテキストを追加することによって準備されます。申請を大幅に遅らせることはないようです
  • onReceive からの情報は、予想されるアラーム開始時刻から 100 秒以上記録されました。onReceive での最初のメソッド呼び出しです
  • ユーザーが電話のロックを解除した直後にアラームが開始された
  • AlarmManager.RTC_WAKEUP フラグを使用します
  • ユーザーは、カスタム ROM を持っていないと言います。彼がカスタム/特別なロック画面を持っている場合は、回答を待ちます
  • 電話モデルは、Sony Xperia U ST25A、Android 4.0.4 です。

この問題を引き起こしている可能性のあるアイデアはありますか? BroadcastReceiverの「内部」WakeLockが何らかの形で機能しない可能性はありますか?

編集:

ここで問題を強調したいと思います.BroadcastReceiverは、onReceiveメソッド全体で電話を起動したままにする必要があります. しかし、私の場合、それはどちらかです

  • 電話は onReceive メソッドが終了する前にスリープ状態になります (「通話の記録」が終了する前であっても)
  • 電話は受信機によってまったく起こされません

また、ユーザーが明確に述べている事実を指摘したいと思います-アラームは、彼が自分で電話のロックを解除したときに正確に開始されました。数回。

いくつかのコード:

@Override
public void onReceive(Context context, Intent intent) {
    Logger.initialize(context, "AlarmReceiver");
    ...
}

ロガーの方法:

public synchronized static void initialize(Context context, String text) {
    try {
        if (mInstance == null) { // this is the block that is runned
            BugSenseHandler.initAndStartSession(context, BUGSENSE_ID);
            mInstance = new Logger(context);
            log("== Logger initialized == from "
                    + (text != null ? text : "")); // it stores times as well. Said 
                                                   // that alarm was started over 100 
                                                   // seconds after it should
        } else {
            log("logger initialized again from "
                    + (text != null ? text : ""));
        }
    } catch (Exception e) {
        try {
            BugSenseHandler.sendException(e);
            mInstance = null;
        } catch (Exception e2) {
        }
    }
}
4

1 に答える 1

0

Commonswareの WakefulIntentServiceを見てください。

于 2013-01-09T15:26:09.233 に答える