問題タブ [android-looper]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Android 2.3.3 で Android ルーパー ループが無期限に実行される
次のメソッド呼び出しは、アプリケーションの別のスレッド内で終了しません。
Looper.loop();
これが発生する理由を診断することはできません。助言がありますか?
android - loop() を呼び出した後、Looper インスタンスで quit() を呼び出すにはどうすればよいですか?
別のスレッド内でルーパーを実行しようとしています。基本的に、このスレッドでルーパーを開始する目的は、適切な SoundPool.OnLoadCompleteListener インスタンスを実行することです。
したがって、コードに関しては次のようになります。
ただし、無限ループであるため、loop の呼び出しは返されません。では、Looper.myLooper.quit() をどのように呼び出すのでしょうか?
android - バックグラウンド スレッドで行われたジオロケーション リクエストにより、メイン スレッドがフリーズする
アプリケーションの次の作業フローがあります。メイン アクティビティには、クリック後に 2 番目のアクティビティを開始するボタンがあります。2 番目のアクティビティにはTextView
、指定されたジオポイントにある都市を示す があります。この都市を見つけるために、バックグラウンド スレッドで作成するGeocoderにリクエストを送信します。
私が期待すること: 2 番目のアクティビティが (ほぼ) すぐに開始され、バックグラウンド スレッドが要求を終了すると、UI スレッドがTextView
コンテンツを更新します。
何が起こるか: 2 番目のアクティビティは、そのジョブが終了したときにのみ開始されます。Geocoder
Wi-Fi をオフにしてボタンをクリックできることを明確にするために、5 ~ 6 秒Geocoder
待ち、ジオポイントを取得できなかったことを示すメッセージがログに表示された直後に、2 番目のアクティビティが起動します。
私が間違っていることは何ですか?関連するコードを以下に示します。完全なサンプル プロジェクトはgithub にあります。
android - バックグラウンド スレッドの PhoneStateListener
バックラウンド スレッドで * コールバック メソッドに対して PhoneStateListener を実行しようとすると問題が発生します。これが私がこれまでにしたことです:
まず、PhoneStateListener の実装を作成しました。次の行に何か:
次に、Handler クラスを作成しました。
最後に、a の中からService
新しいものを開始し、そのルーパーにHandlerThread
my をアタッチします。PhoneStateHandler
私が期待しているのは、UI スレッドではなくスレッドMyPhoneStateListener.onCallStateChanged()
で実行されるメソッドなどです。mThread
PhoneStateListener が最初に作成されたときに、現在のスレッドの Looper にバインドされるという事実を利用しています。これは文書化されていませんが、実際に起こっていることです。
ただし、私が観察したのは、PhoneStateHandler.onHandleMessage()
メソッドがHandlerThread
のルーパーで呼び出されるにもかかわらず (予想どおり)、MyPhoneStateListener.onCallStateChanged()
が UI スレッドで呼び出されることです。
私のコードの何が問題なのか手がかりはありますか?
ありがとう
android - ハンドラーはスレッドかどうか、そしてハンドラーとスレッドを持つルーパーの役割は何ですか?
ハンドラーはスレッドですか? はいの場合、この Handler(スレッド) から UI を更新するにはどうすればよいですか?
ルーパーのコンセプトを使えば、それは可能かもしれません。この場合、どのスレッドにも適用されますか? これらのスレッド、ハンドラー、ルーパーについて非常に混乱しています。誰か例を挙げて説明してもらえますか? ハンドラーはスレッドですか? はいの場合、この Handler(thread) から UI を更新するにはどうすればよいですか。
ルーパーの概念を使えば可能かもしれませんが、この場合、それはどのスレッドにも当てはまりますか? このスレッド、ハンドラー、ルーパーについて非常に混乱しています。誰か例を挙げて説明してもらえますか?
「スレッドとハンドラーの違いは何ですか」という質問は、ハンドラーとスレッドに関するものであり、ルーパーとその動作については説明していません。そして、受け入れられた答えは、「一方でハンドラーは、UIスレッドと通信できるようにするバックグラウンドスレッドです(UIを更新します)」と述べていますが、以下の「ben75」による答えによると、ハンドラーはスレッドではありません。したがって、これはその質問の複製ではないと思います。
android - BroadcastReceiverのonReceiveメソッドでルーパーを終了することは可能ですか
次のコードを使用してonReceive
起動すると、次のエラーが発生します
のcom.sample.common.UserActivity$1@41c2b4b0
問題はこのステートメントです。以下のコードでブロードキャストを受信した後Looper.myLooper().quit();
、どうすれば終了できますか?looper
android - Asynctask を正しく使用するにはどうすればよいですか?
私は Android アプリケーションを開発していますが、Asynctask と Looper がさらに問題を引き起こし、この問題を解決する方法がわかりません... これが私の主な活動です:
***** 編集 *****
ビデオ ギャラリー コード:
asynctask を再度含む別のアクティビティに変更すると、エラーが発生しました:
**** 編集 2 ****
Looper.prepare(); を削除すると ビデオ ギャラリーで別のエラーが発生しました:
どうすればこの問題を解決できますか?? 他のすべての質問を読みましたが、解決策は役に立ちません。
java - メインスレッドで getLooper() を呼び出す方法は?
Android では、メイン スレッド &HandlerThread
にはデフォルトで Looper & MessageQueue があります。handlerThread オブジェクトで getLooper() を呼び出すことはできますが、なぜ main Thread でできないのでしょうか?
実際のシナリオでは、 mainThread でgetLooper()を使用する必要はありません。を呼び出すだけLooper.getMainLooper()
です。なぜそれが機能しないのか知りたいだけです。
Looper.getMainLooper().getThread()
を返すJavaの観点から理解していますが、 Thread クラスにはgetLooper()メソッドjava.lang.Thread
がありません。しかし、Androidのメインスレッドはそうです。メインスレッドに としてアクセスできますか?HandlerThread
java - Loppers Android エラー
こんにちは私はアンドロイドで1つのクラスを持っています
その作業と戻り gps が、別のクラスで呼び出すと、lopper.prepare のエラーが送信されます
java.lang.RuntimeException: Looper.prepare() を呼び出していないスレッド内でハンドラを作成できません
getLocation(GPSTracker.java:69)
(GPSTracker.java:47)
どこにエラーがありますか?
よろしく!