-2

@commonswareあなたがこのコミュニティに与えてくれたすべての助けに感謝します.

とにかく、 locationpollerを使い始めてからいくつか質問がありました

別の投稿で述べたように、ポーリング サービスを開始すると、ときどき次のように表示されます。

03-07 15:42:03.260: W/MessageQueue(14699): Handler (android.location.LocationManager$ListenerTransport$1) {419425f8} sending message to a Handler on a dead thread

これはまだ懸念事項ですか?これが単に locationmanager が台無しにしているかどうかはわかりませんでした。おそらくタイムアウト ハンドラでした。

次は、この投稿を作成する上での私の主な関心事です。

目的地を認識するナビゲーションのようなアプリケーションの一部として画面がオフになっているときにユーザーを追跡する必要がありますが、しばらく地下に行った後、何らかの理由で目覚めません。

ネットワークなしでプレイすると、奇妙なテスト結果が得られます。今のところ、私はあなたが提案するようにサービスを開始します

Intent i=new Intent(this, LocationPoller.class);
i.putExtra(LocationPoller.EXTRA_INTENT, new Intent(this, LocationReceiver.class)); i.putExtra(LocationPoller.EXTRA_PROVIDER, LocationManager.NETWORK_PROVIDER);

機内モードをオンにしたテストがPollerThread#onPreExecute()毎回呼び出され、最後まで到達せず、2分後、受信機onTimeout Runnableがトリガーされたときに最終的に通知されると、すべてが文書化されたとおりに機能するようです。

その後、機内モードを再びオフにすると、すべてが正常に戻ったように見え、最終的に受信機が再び追いつきます。

私の問題は、現実の世界でテストし、地下鉄に乗って家に帰り、アプリとサービスを実行したままにしておくと、地上で再接続すると、ログにサービスが継続している痕跡が見つからないようであり、受信機、別のウェイクロックを使用して画面をオンに戻したり、目的地に近づいたときに通知を送信したりしますが、アプリを再度開くまでトリガーされません

簡単に言えば、これはライブラリの問題ですか?locationmanager の仕組みに問題がありますか? 機内モードを使用するだけでなく、これをテストするためのより良い方法について何かアイデアはありますか?

地上、自転車、運転など、すべてがうまく機能しているように見えますが、地下鉄を導入してすべての接続が失われると、たわごとが機能しなくなり、サービスがなぜサービスを提供するのかを理解するためのロケーションマネージャーの細かい点について十分に知りません止まるようです

免責事項このアプリは地下鉄の人向けではありませんが、ユーザーがどこにもいないときにネットワーク接続が失われたかどうかはわかりません (テストする方法はありません)。追跡も失われないことを願っています (設定に応じて、ネットワーク プロバイダーまたは GPS のみを使用することを選択できます)。

4

1 に答える 1

2

これはまだ懸念事項ですか?

何も思いつきません。これを実証する再現可能なテスト ケースを作成できる場合は、プロジェクトの問題トラッカーに問題を投稿してください。

私の問題は、現実の世界でテストし、地下鉄を家に持ち帰り、アプリとサービスを実行したままにし、地上で再接続すると、ログにサービスが継続している痕跡が見つからないように見えることです

サービスは「続行」することは想定されていません。サービスは、位置情報を取得するためにしばらく試行し、タイムアウト メッセージの配信後にシャットダウンします。AlarmManager実際の「ポーリング」を行うのは、または同様の手段を介して、あなた次第です。

ドキュメントの引用:

任意の頻度で LocationPoller に連絡するように AlarmManager アラームを設定するだけで、そこからすべてのロケーション作業が処理され、ブロードキャスト インテントを介して結果が送信されます。次に、AlarmManager を介してアラームを作成する必要があります。そのため、場所を取得する頻度と、デバイスがスリープ状態の場合にデバイスを起動するかどうかを制御できます。特に GPS を使用している場合は、ユーザーのバッテリーが消耗するため、位置情報の更新を頻繁に要求しないでください。

したがって、最初のステップは、アラームが適切に機能しているかどうかを判断することです。を使用adb shell dumpsys alarmして、登録されたアラームを調べて、何が起こっているかを確認できます。

于 2013-03-07T21:52:58.053 に答える