問題タブ [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.

0 投票する
0 に答える
70 参照

android - Android 2.3.3 で Android ルーパー ループが無期限に実行される

次のメソッド呼び出しは、アプリケーションの別のスレッド内で終了しません。

Looper.loop();

これが発生する理由を診断することはできません。助言がありますか?

0 投票する
0 に答える
64 参照

android - loop() を呼び出した後、Looper インスタンスで quit() を呼び出すにはどうすればよいですか?

別のスレッド内でルーパーを実行しようとしています。基本的に、このスレッドでルーパーを開始する目的は、適切な SoundPool.OnLoadCompleteListener インスタンスを実行することです。

したがって、コードに関しては次のようになります。

ただし、無限ループであるため、loop の呼び出しは返されません。では、Looper.myLooper.quit() をどのように呼び出すのでしょうか?

0 投票する
1 に答える
1128 参照

android - バックグラウンド スレッドで行われたジオロケーション リクエストにより、メイン スレッドがフリーズする

アプリケーションの次の作業フローがあります。メイン アクティビティには、クリック後に 2 番目のアクティビティを開始するボタンがあります。2 番目のアクティビティにはTextView、指定されたジオポイントにある都市を示す があります。この都市を見つけるために、バックグラウンド スレッドで作成するGeocoderにリクエストを送信します。

私が期待すること: 2 番目のアクティビティが (ほぼ) すぐに開始され、バックグラウンド スレッドが要求を終了すると、UI スレッドがTextViewコンテンツを更新します。

何が起こるか: 2 番目のアクティビティは、そのジョブが終了したときにのみ開始されます。GeocoderWi-Fi をオフにしてボタンをクリックできることを明確にするために、5 ~ 6 秒Geocoder待ち、ジオポイントを取得できなかったことを示すメッセージがログに表示された直後に、2 番目のアクティビティが起動します。

私が間違っていることは何ですか?関連するコードを以下に示します。完全なサンプル プロジェクトはgithub にあります。

0 投票する
0 に答える
1232 参照

android - バックグラウンド スレッドの PhoneStateListener

バックラウンド スレッドで * コールバック メソッドに対して PhoneStateListener を実行しようとすると問題が発生します。これが私がこれまでにしたことです:

まず、PhoneStateListener の実装を作成しました。次の行に何か:

次に、Handler クラスを作成しました。

最後に、a の中からService新しいものを開始し、そのルーパーにHandlerThreadmy をアタッチします。PhoneStateHandler

私が期待しているのは、UI スレッドではなくスレッドMyPhoneStateListener.onCallStateChanged()で実行されるメソッドなどです。mThreadPhoneStateListener が最初に作成されたときに、現在のスレッドの Looper にバインドされるという事実を利用しています。これは文書化されていませんが、実際に起こっていることです。

ただし、私が観察したのは、PhoneStateHandler.onHandleMessage()メソッドがHandlerThreadのルーパーで呼び出されるにもかかわらず (予想どおり)、MyPhoneStateListener.onCallStateChanged()が UI スレッドで呼び出されることです。

私のコードの何が問題なのか手がかりはありますか?

ありがとう

0 投票する
2 に答える
1009 参照

android - ハンドラーはスレッドかどうか、そしてハンドラーとスレッドを持つルーパーの役割は何ですか?

ハンドラーはスレッドですか? はいの場合、この Handler(スレッド) から UI を更新するにはどうすればよいですか?

ルーパーのコンセプトを使えば、それは可能かもしれません。この場合、どのスレッドにも適用されますか? これらのスレッド、ハンドラー、ルーパーについて非常に混乱しています。誰か例を挙げて説明してもらえますか? ハンドラーはスレッドですか? はいの場合、この Handler(thread) から UI を更新するにはどうすればよいですか。

ルーパーの概念を使えば可能かもしれませんが、この場合、それはどのスレッドにも当てはまりますか? このスレッド、ハンドラー、ルーパーについて非常に混乱しています。誰か例を挙げて説明してもらえますか?


「スレッドとハンドラーの違いは何ですか」という質問は、ハンドラーとスレッドに関するものであり、ルーパーとその動作については説明していません。そして、受け入れられた答えは、「一方でハンドラーは、UIスレッドと通信できるようにするバックグラウンドスレッドです(UIを更新します)」と述べていますが、以下の「ben75」による答えによると、ハンドラーはスレッドではありません。したがって、これはその質問の複製ではないと思います。

0 投票する
1 に答える
196 参照

android - BroadcastReceiverのonReceiveメソッドでルーパーを終了することは可能ですか

次のコードを使用してonReceive起動すると、次のエラーが発生します

com.sample.common.UserActivity$1@41c2b4b0

問題はこのステートメントです。以下のコードでブロードキャストを受信した後Looper.myLooper().quit(); 、どうすれば終了できますか?looper

0 投票する
2 に答える
131 参照

android - Asynctask を正しく使用するにはどうすればよいですか?

私は Android アプリケーションを開発していますが、Asynctask と Looper がさらに問題を引き起こし、この問題を解決する方法がわかりません... これが私の主な活動です:

***** 編集 *****

ビデオ ギャラリー コード:

asynctask を再度含む別のアクティビティに変更すると、エラーが発生しました:

**** 編集 2 ****

Looper.prepare(); を削除すると ビデオ ギャラリーで別のエラーが発生しました:

どうすればこの問題を解決できますか?? 他のすべての質問を読みましたが、解決策は役に立ちません。

0 投票する
1 に答える
998 参照

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

0 投票する
1 に答える
115 参照

java - Loppers Android エラー

こんにちは私はアンドロイドで1つのクラスを持っています

その作業と戻り gps が、別のクラスで呼び出すと、lopper.prepare のエラーが送信されます

java.lang.RuntimeException: Looper.prepare() を呼び出していないスレッド内でハンドラを作成できません

getLocation(GPSTracker.java:69)

(GPSTracker.java:47)

どこにエラーがありますか?

よろしく!