問題タブ [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 投票する
1 に答える
1502 参照

java - ソケットでHandlerThreadを正しく使用するにはどうすればよいですか?

もともとは単純なスレッドとハンドラーを使用していたので、HandlerThreadクラスを見てきましたが、AndroidでNetworkOnMainThreadExceptionが発生したクロッパーが登場しました。

ソケットのようなものをHandlerThreadに導入する方法を理解できないようです。これは、ブロッキングコードを実行する場所です。ただし、ルーパーがある場所であるrunをオーバーライドするべきではないため、HandlerThreadを使用してこれを行うことはできません。

また、メッセージを介してHandlerThreadを呼び出して、ソケットでのリッスンを開始することはできません。これは、それに渡される他のメッセージをブロックするためです。

では、このHandlerThreadクラスは、非ブロッキングのタスク用に設計されていますか?そのようなスレッドをどのように使用してソケットでリッスンできるのか理解できないようですが、メインUIスレッドから通常のスレッドを作成していたときのようにリクエストを処理できます

通常のスレッドでは、実行中にLooper.prepare()とLooper.loop()を呼び出してから、これら2行の間にコードを配置することができます(ハンドラーを作成するためのチェックを使用)が、通信に問題がありますこの新しいスレッドでは、メッセージはスレッドに渡されません。

では、ハンドラーを使用して相互に通信し、ソケットの使用などのタスクを実行できるスレッドを作成するにはどうすればよいですか。

ASyncTaskコメントの使用を探していません。スレッドが相互に通信できるように、自分でスレッドを使用する方法を知りたいです。

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

android - インターネット接続を常に確認し、接続されている場合はコードを実行しています (Android)

TextViewインターネット接続を常に確認し、接続が表示されるかどうかを変更したいと思います。しかし、TextViewアプリケーションを更新するまで変更されません。これが私の現在のコードです:

そしてisInternetOn()コード:

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

android - Looper.getMainLooper()で初期化されたハンドラーは、メッセージコールバックに応答しません

異なるスレッドから同じルーパーをリッスンするハンドラーを実装しようとしています。

以下に2つのハンドラーがあります。1つはメインスレッドで作成され、もう1つは子スレッドで作成されますが、どちらもメインルーパーでリッスンするように初期化されています。

しかし、以下のようなメッセージを送信すると、子ハンドラーのみがメッセージを出力します。メインハンドラーはメッセージを受信しません。

私は何が間違っているのですか?読んでくれてありがとう。

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

java - Looper.loop は呼び出されませんが、ハンドラー内のコードは引き続き実行されます

looper.loop がどのように機能するか、コードでいつ使用するかを理解しようとしています。実行可能なバインドされたサービスがあります。内部には、Ui を更新するコードを保持するために使用されるハンドラーがあります。これがコードです。

  1. 私がルーパーを読んだことから。ハンドラが作成される前に prepare を呼び出す必要があります。しかし、そうしなかったことに気付きましたが、このコードはまだ機能しています。これはどのように可能ですか?
  2. これを修正したいのですが、loper.loop をどこに置くべきかわかりません。このハンドラは何度も呼び出されるためです。.prepare の直後に looper.loop を入れてもよろしいでしょうか? それから .quit when isThreadStarted == false?
0 投票する
2 に答える
1885 参照

android - ProgressDialog を表示し、ワーカーを実行し、ワーカーの終了を待機する Android メソッド

ProgressDialog を示す静的メソッドを記述し、ワーカーをスレッドで実行し、ワーカーが終了した後に ProgreesDialog を閉じる必要があり、私のメソッドはワーカーが行ったことを返す必要があります。これは私のコードです:

すべてが機能しますが、ProgressDialog は閉じません。looper.quit() が悪いことをしているのではないかと思いますが、Looper.loop() を停止する必要があります。ProgressDialog をすぐに表示する必要があるため、 loop() を呼び出します。

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

android - Android AsyncTask と Looper Handler

5 秒ごとにデータベースにクエリを実行するバックグラウンド サービスを実装しました。クエリが結果を返さない場合、サービスは 5 秒間待機し、データベースを再度クエリする必要があります。クエリが結果を返す場合、アクティビティを呼び出して結果を渡す必要があります。

基本的に doInBackground() でデータベースを読み取り、結果を返す AsyncTask から始めて、onPostExecute() がアクティビティを呼び出すようにしました。現在、サービスの onStartCommand() で AsyncTask.execute() を呼び出しています。ただし、これは、サービスの開始時にタスクが 1 回だけ呼び出されることを意味します。

代わりに、ここで説明されているように、自分のタスクにルーパー/ハンドラーを使用する必要があります: Android で x 分ごとに非同期タスクを実行する方法は?

しかし、そのコードを正しく理解していれば、サービスはどこかのループで startRepeatingTask を呼び出す必要がありますが、doSomething() 自体が x 分ごとに呼び出されることを望んでいました。

私はAndroidが初めてです。質問がかなり基本的なものであるか、他の解決策を理解していなかっただけで、誰かが私の状況でうまくいくかどうかを説明してくれることを望んでいた場合は申し訳ありません!

ありがとう!

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

android - 独自のハンドラ/ルーパーを持つ Android ワーカー スレッド

1) UI スレッドにメッセージを送信して GUI の内容を変更し、2) UI スレッドからメッセージを受信して​​ワーカー スレッドの動作を制御できるワーカー スレッドが必要です。

最初の部分は簡単です。UI スレッドで Handler を作成し、ワーカー スレッドがそれにメッセージを送信できるようにします。魅力のように機能します。ワーカー スレッドは Thread.sleep() を使用して効率的な遅延を実行し、「何かをする」ためにウェイクアップし、UI スレッドのハンドラーに更新を送信し、繰り返します。

次の部分はどうやら Android では難しいようです。ワーカー スレッドには、メッセージを受信できるように Handler を作成するための Looper が必要です。また、Looper.loop() はブロッキング コールです。は現在実行中です (「実行」、更新メッセージの送信、スリープ、繰り返し)。

これは、ワーカー スレッドのルーパーを実行するためだけに 3 番目のスレッドが必要であることを意味しますが、これはばかげています。ワーカー スレッドに有用なことを実行させ、メッセージが到着したときにメッセージを処理することが可能であるべきです。これにより、最小数のスレッド オブジェクトと最小のオーバーヘッドで効率的なシステムが得られます。Android でこの動作を実装する方法がわかりません。

では、ワーカー スレッドはどのように Handler をサポートし、他に役立つことを行うのでしょうか? ありがとう!

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

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

通常、別のスレッドからUIスレッドで何かをしているときにエラーが発生すると思いましたが、何が間違っているのかわかりません。エラーは、電話が移動しているときにのみ表示されるようです。そのため、GPS の場所が変更されています。

最新の場所を保存したいので、UI には何もありません。メインアクティビティから呼び出される次のメソッドがあります。

私が得るエラーは次のとおりです。

行 97=locationManager.requestLocationUpdates(s, interval,minDistance, listener); (LocationManager クラス)

Looper.prepare(); を呼び出す必要があるようです。および Looper.loop(); どこかだけど、どこか分からない?この質問AsyncTask と Looper.prepare() エラーと関係があるかもしれません

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

android - Android でソースが見つかりません

アプリをデバッグしようとするたびに、Eclipseは基本的な Java クラス (たとえば、Looper.class) に対してClass File Editora を開き、通常は aを返します。Source not Found私はこれに本当にうんざりしています。これらのせいでうまくデバッグできませんSource not Found。これを解決する方法はありますか?

ありがとうございました!