0

サービスでGPS呼び出しを行っているAndroidアプリのコードを編集しています。LocationListener。それはまた使用しますServiceConnection

一部のビューでは、デバイスは、アプリケーションの応答に時間がかかりすぎていると判断し、ユーザーは「強制終了」または「待機」のいずれかを実行できます。このポップアップが表示される前は、アプリケーションは引き続きユーザーが使用でき、スクロール、スライド、ボタンの押下などが可能です。

この問題が発生するたびにGPSサービスが実行されているため、これはGPSサービスに関連していると想定しています。

この問題は、バックグラウンドスレッドではなく、UIthreadで実行されているスレッドに関係していると聞きました。しかし、サービスはバックグラウンドスレッドで非同期に実行されると確信していました。

洞察に感謝

4

3 に答える 3

2

サービスを使用しても、必ずしも新しいスレッドが生成されるとは限りません。サービス呼び出しは、その呼び出し元のスレッドで実行されます。android API Serviceのドキュメントから:「他のアプリケーションオブジェクトと同様に、サービスはホスティングプロセスのメインスレッドで実行されることに注意してください。」

別のプロセスで実行するサービスを指定できますが、ベストプラクティスは、サービスに新しいスレッドを生成することです。

Androidサービスの詳細:http: //developer.android.com/reference/android/app/Service.html

于 2012-10-01T20:12:57.753 に答える
1

AsyncTaskを拡張することを強くお勧めします。これにより、UIスレッドを適切かつ簡単に使用できるようになります。スレッドやハンドラーを操作しなくても、バックグラウンド操作を実行し、UIスレッドで結果を公開できます。すべての計算をdoInBackgroundメソッドで実行することをお勧めします。BTWForceCloseまたはWaitは、この種の問題の典型的な動作です。幸運を!!!

于 2012-10-01T20:26:41.403 に答える
0

サービスで処理すると、アプリケーションがハングする可能性があります。

実装を検討する必要がある解決策は、別のスレッドでアクティビティを停止させる可能性のあるロジックを実行することです。これには、データベースの更新/挿入、ネットワーク通信、およびその他の長時間実行されるコードなどが含まれます。

AsyncTaskは、onPreExecute関数とonPostExecute関数でUIを操作できるため、このための便利なメソッドです。

AsyncTaskをサブクラスとしてサービスに直接実装できます。

うまくいけば、これは役に立ちます!乾杯

于 2012-10-01T20:27:09.637 に答える