Android Nonuiスレッドアプリケーション「応答しない」
-
12-12-2019 - |
質問
私はGPSがサービス内で呼び出されたAndroidアプリのコードを編集しています。LocationListener。ServiceConnection
も使用しています
いくつかのビューでは、デバイスは、私のアプリケーションが応答するのに長すぎると決定し、ユーザーが「強制的に閉じる」または「待機」のいずれかであることを決定します。このポップアップが表示される前に、アプリケーションは依然としてユーザーが使用でき、スライド、スライド、ボタンなどを押します。
私はこの問題が発生したときに走っているときにGPSサービスと関連していると仮定しているだけであると仮定しています。
この問題は、バックグラウンドスレッドの代わりにUithRead上で実行されているスレッドと関係があると聞いた。しかし、私はバックグラウンドスレッドでサービスが非同期的に実行されることを確信していました。
洞察が高く評価されています
解決
サービスを使用すると、必ずしも新しいスレッドが発生するわけではありません。サービスコールはそれが発信者スレッドで実行されます。Android APIサービスからのDoc At: 「他のアプリケーションオブジェクトと同様のサービスは、ホスティングプロセスのメインスレッドで実行されます。」。
別のプロセスで実行するサービスを指定できますが、ベストプラクティスはサービス内の新しいスレッドを生成することです。
Androidサービスの詳細: http://developer.android.com/reference/android/app/service.html.
他のヒント
私はあなたがasynctaskを拡張することを完全に推奨し、それはUIスレッドを適切かつ簡単に使うことを可能にします。スレッドやハンドラを操作する必要なしに、バックグラウンド操作を実行し、UIスレッド上で結果を公開できます。DoinBackground Method.btw Force CloseまたはWait のすべてのコンピューティングをすべてやり直すことをお勧めします。 頑張って!!!
サービス内の処理は、アプリケーションがハングアップする可能性があります。
あなたが実装を見ているべき解決策は、アクティビティを別のスレッドで停止する可能性のあるロジックを実行することです。これには、データベースの更新/挿入、ネットワーク通信、およびその他の長い実行コードのようなものが含まれます。
onpreexecuteおよびonPostexecute関数でUIを操作できるので、これに便利な方法です。
サブクラスとしてのサービスに直接asynctaskを実装できます。
hooeplyこれは助けます! 歓声