3

私のアプリケーションは、Activity Recognition の検出されたアクティビティ データを定期的に収集します。ドキュメントに記載されているとおりに実装しましたが、1 分間隔で実装しました。

ユーザーがログインしている限り、アプリケーションは に登録され、PendingIntentGoogle Play プロセスからアップデートを受信します。

私の問題と関係がない限り、1分ごとに更新を要求することから生じるバッテリーの使用、ネットワーク、およびパフォーマンスの問題について私に教えないでください:

問題: 一部のデバイス (Nexus 5 で最も多く発生) では、真夜中に 5 ~ 6 時間、 IntentService電話がかかってきました。

よくわかりませんが、発生する可能性のあるドキュメントに記載されているように、Google の最適化と、重要なモーション センサーがアクティビティ認識メカニズムに入るモーションを検出せず、一種のアイドル モードになっていることが関係していると思われます。

私のアプリにとって、現在のアクティビティがほぼ同じであるか、長時間アイドル状態であっても、毎分何があるかを知ることが重要です..

私の質問:

  • 重大なモーション センサーまたはその他の理由により、定期的なアクティビティ認識が呼び出されなくなったかどうかを知るにはどうすればよいですか?
  • 何らかの方法でGoogleプレイプロセスに強制的にアクティビティの更新を実行させる方法はありますか?
4

1 に答える 1

4

ActivityRecognitionClient.requestActivityUpdatesごと:

バッテリーを節約するために、デバイスが長時間「STILL」の状態にあると、アクティビティ レポートが停止する場合があります。デバイスが再び移動すると再開されます。これは、Sensor.TYPE_SIGNIFICANT_MOTION ハードウェアをサポートするデバイスでのみ発生します。

あなたが疑ったように。多くのデータ ストレージ手法を使用して最後の値を保存できない理由はありません。単純なSharedPreferenceで十分な場合があります。

アクティビティの変化だけでなく、呼び出された IntentService に基づいてアクションを直接トリガーする場合 (他のアプリが非常に迅速にトリガーする可能性があるため、悪い考えです)、それらのアクションを分離し、代わりにアラームを設定するか、定期的にトリガーする必要があります。受信した最後のアクティビティから現在の値を読み取り、必要な特定の時間間隔でアダプターを同期します。

于 2014-06-12T06:41:41.300 に答える