2016-12-21 2 views
2

私はこの質問をほぼ3週間の調査の後に行うことに決めました。ビジネス要件として、私は自分のアンドロイドアプリケーションで常時稼働しているバックグラウンドサービスを維持する必要があります

私のアプリにはバックグラウンドサービスが1つしかなく、常にBLEデバイスを検索する必要があります。 (私はBLEデバイスがスキャンを一時停止して再開する範囲にない場合、私は低速スキャンモードを設定しています。このアプリケーションは、BLEデバイスが範囲内に入ったときにBLEデバイスで何らかの認証を行うことを目的としているため、誰もが利用できるわけではありません。うまくいけば、これは常に実行されているサービスの重要性を確立します。私は前景サービス(ビジネス要件)を使用することはできません。

アンドロイドが私のサービスを殺すたびにonDestroy()は呼び出されません。だから私の最善の策は、5分ごとにトリガするアラームマネージャを使用して、サービスが強制終了されているかどうかをチェックし、殺された場合はstartService()を呼び出します。アラームはしばらくは正常にトリガされますが、ランダムな時間(1,2時間)後にもアラームが殺され、それ以上トリガされません。

私は、サービスを開始する責任を負うonReceive()のアラームで放送を送信しています。私はいくつかのランダムな時間の後に、アラームマネージャが誤動作する理由を説明したり、提案したりすることができます。私は現在、nexus 6p、Galaxy s7 edge、Samsung A5、Huawei P9で自分のアプリをテストしています。

これ以上説明することはできません。

答えて

2

アラームトリガーはしばらく時間がかかりますが、アラームがトリガーされてもそれ以上トリガーされない場合でも、ランダムな時間(1,2時間)後にトリガーされます。

adb shell dumpsys alarmにアラームが表示されない場合は、「アラームが強制終了」と表示されることがあります。これは通常、ユーザーが設定で強制停止を使用しない限り発生しません。

しかし、おそらく、アラーム自体があります。ただし、デバイスはDoze modeに入っていますので、アラームは無視されます。あなたのオプションは以下のとおりです。

  • は、setAndAllowWhileIdle()を試してみてくださいとして頻繁にあなたが希望として送信されないことがある、または

  • ユーザーは、ユーザーがかもしれないことを念頭に、バッテリーの最適化ホワイトリストにアプリを追加しましこれをしないことを選択、または

  • ユーザーは、ユーザーがこの

をしないことを選択することを念頭に、すべての時間に差し込まれ、デバイスを維持しましそれはあなたが WakeLock(慎重)を使用している場合を除き、デバイスそのチャンスがある

を殺されている場合

I)はonReceive(アラームthrughブロードキャストを送信していますが、サービスを開始する責任がありますサービスが実際に開始される前に眠りに落ちます。

+0

返信いただきありがとうございます。私は実際にアラームが存在すると判断した場合、明日adbに確認します。どのように 'setAndAllowWhileIdle()'を使って5分ごとにアラームを繰り返すのですか?また、WakeLockについては、私の放送受信機のonReceive()で取得し、 'startService()'を呼び出してからリリースします。どのようになっているのでしょうか? – madking

+0

@madking: "setAndAllowWhileIdle()を使用して、アラームを5分ごとに繰り返す方法は?" - できません。私は広告された最小期間が9分だと思うし、頻繁ではないかもしれません。 「それはどうしたの?」つまり、あなたの「WakeLock」が約1マイクロ秒間取得されたことを意味します。 'startService()'は非同期です。 'startService()'が返ったときにサービスは開始されません。私はあなたのサービスがとにかく仕事をするために 'WakeLock'を必要とすることを期待しています。そのためユーザーはあなたのアプリに不満を感じるかもしれません。 – CommonsWare

+0

私は 'RTC_WAKEUP'を使用しています。サービスが開始されているかどうかに関係なく、電話がDOZEモード(Android 6で導入されています)に関係なく、通知は' onReceive() 'で発行されます。非常に短い瞬間にCPUをウェイクアップさせるので、アラームがトリガされます。しかし、通知はしばらくしてから停止します。 – madking

関連する問題