問題タブ [android-handlerthread]
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.
java - Android HandlerThread: ハンドラー ポストが Runnable を実行しない場合がある
私はHandlerThread
Android で実験していますが、奇妙な動作を説明できないようです。これは、この一意のスレッドを介してメッセージを単純にログに記録するために使用しているクラスです。
そして、これがこのクラスの私の使用法です:
ここで、奇妙な動作について説明します。これを何度も実行した後、ログが約 7xx または 8xx (特定の値ではない) で停止することがあり、ほとんどの場合は 999 になりますが、実際にはすべての投稿がそうではないように見えます。走る。どうしてこれなの?誰か説明してもらえますか?
精度: これらのテストには Genymotion エミュレーターを使用しています。
更新: 実際のデバイスで同じ動作 (Moto X 2012)
手がかりをありがとう。
解決済み: これが発生した理由は、Android の logcat が非常に多くのエントリの処理を処理できなかったため、単純にそれらの表示をスキップしたためです。Handler の runnable は実際には毎回実行され、次の方法で簡単に確認できます。
を確認するhitsCounter
と、実際には予想どおり 1000 に等しいことがわかります。
android - BroadcastReceiver内のHandlerThread
メイン UI スレッドでさらにサービスを開始するBroadcastReceiverのonReceiveメソッド内でHandlerThreadを使用することは可能ですか??
私の目的は、サービスが別のスレッドで開始されるように、onReceiveメソッド内でHandlerThreadを使用することです。
しかし、それを実装する方法がわかりません。
ヒントはありますか?
ありがとう
編集:サービスクラス
サービスを正しく使用していないと思います。助けてください。
EDIT2:Logcat
android - バックグラウンド スレッドからほぼ瞬時に UI スレッドのメソッドを呼び出す方法はありますか?
これは、メイン/UI スレッドでメソッドを呼び出すことができるという問題ではなく、瞬時に呼び出すことができるという問題です。
UI レスポンシブ要件のため、通常、UI スレッドと直接対話することは許可されていません。その場合、メイン スレッドに対する要求をキューに入れるシステムを配置することは理にかなっています。ルーパー、ハンドラーなどを備えたそのシステムがあります。
これが私がやったことです:バックグラウンドスレッドでいくつかのタスクを実行し、条件が満たされるとすぐにメインスレッドを親密にしたい(リスナーを作成しました)、応答ハンドラーを使用して投稿します..何かこれ:
すでに送信された十分なリクエストについて PhotoGallery に通知しないと、PhotoGallery はますます多くのリクエストを送信し続け、アプリは応答しなくなります。
また、リクエストはキューに入れられ、後で実行されるため、リクエストが多すぎます。
したがって、私の質問は次のとおりです。
バックグラウンド スレッドからほぼ瞬時に UI スレッドでメソッド/通知を呼び出す方法はありますか?
android - Handlers の連続実行の件
このスニペットは、Android のハンドラー (スレッド処理) を説明しているサイトから取得しました。
2 番目に実行されたタスクで出力されたタスクから判断するとHandler
、
記事の執筆者は、2 番目Handler
が最後に実行されることを確信しているようです。
私の質問は、最初のジョブが終了しHandler
た直後に 2 番目が最後に実行されるというのが本当かどうかということです。Handler
ただし、複数回実行すると、最後に実行されます。私の考えでは、Handler
はバックグラウンドで実行されるためThread
、これら 2 つのタスクのどちらHandler
が最初に実行されるかを知ること (予測することさえ) は想定されていません。説明が必要です、事前に感謝します。
android - バックグラウンド スレッドが独自の Handler と Looper を生成するのはなぜですか
UIのコンポーネントを変更するためだけに、バックグラウンドスレッドが独自のハンドラーとルーパーを生成するのはなぜですか。簡単に言えば、次のことを知っています。
Looper : メッセージ キュー内のタスクをループして実行する
Handler : タスクをキューに投稿する
インターネットの記事から取ったこのスニペットを見てください
コードを完全に誤解しているか、Android のスレッド基盤が不足しています。申し訳ありません。
バックグラウンド スレッドは、基本的にそれ自体を (2 回) 繰り返します。主なアイデアは、バックグラウンド スレッドを介して UI コンポーネントを操作することです。
これを見てください:
バックグラウンドスレッドが独自のハンドラーを作成するのはなぜですか。それがUIのコンポーネントの操作の問題である場合、UIスレッドハンドラーの参照とハンドラーを介して実行可能な投稿を取得しないのはなぜですか。
と
これは独自のルーパー (バックグラウンド スレッドのルーパー) を作成しています。これは、バックグラウンド スレッドが独自のメッセージ キューを作成していることを示します。バックグラウンドスレッドではなく、メインスレッドのメッセージキューをいじるだけではいけません。
前もって感謝します。
android - HandlerThread のルーパーを設定した Handler が UI オブジェクトと対話できるのはなぜですか?
なぜこのコードが機能するのですか?
UI オブジェクトと通信できる唯一のスレッドは UI スレッドであるとどこかで読んだ、または何かを見逃している
私はいくつかの調査を行っていますが、まだ答えが見つかりません。助けてください。どうもありがとうございました。
これは私がログから得たものです
10-13 18:47:42.888 23841-23841/th.co.me.sampleapp I/onCreate: Thread[main,5,main]
10-13 18:47:42.891 23841-24041/th.co.me.sampleapp I/Thread:: Thread[myHandlerThread,5,main]
更新 1
私は@nshmuraからこのコードを試しましたが、エラーが発生しました。今はとても混乱しています
android.view.ViewRootImpl$CalledFromWrongThreadException: ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます。
android - Android - いつ HandlerThread/Thread/ThreadPool/IntentService を使用しますか?
HandlerThread/Thread/ThreadPool/IntentService のそれぞれの使用方法は知っていますが、バックグラウンド タスクに使用するためにどれを選択する必要があるのか 本当にわかりません。
誰かがそれぞれをいつ使用するかについていくつかのヒントを持っていますか?