問題タブ [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.
android - Android で HandlerThread を使用する理由
Android では、Handler を使用してメッセージを投稿/処理できます。HandlerThread を使用しない場合 (その Looper を Handler に渡す)、この場合、Handler は MainThread (UI Thread) の Looper を使用しますか?
Handler が MainThread の Looper を使用すると、どのような結果が得られますか? mainThread がブロックされる可能性がありますか?
java - HandlerThread.getLooper() が無期限にブロックする
HandlerThread を使用して、独自のスレッドで MediaPlayer を実行する方法を学習しようとしています。しかし、私は最初のステップで失敗しています。Java/Android のスレッドを理解するのに 2 日間苦労しましたが、本当に助けが必要です。(Java と Android の両方で数え切れないほどの例と javadoc ページを読みました)、非常にイライラしたり、愚かだと感じています。
以下の例では、getLooper() は無期限にブロックします。理由がわかりません。以下のコードを修正してこれを修正する方法を教えてください。
また、MediaPlayer のメソッドが (非同期で) 呼び出されるメッセージを送信する方法の例は非常に価値があり、おそらく 1 週間節約できます。
ありがとうございました
android - HandlerThread の NullPointerException
このバグは何時間も私を困惑させました。NullPointerExceptionを取得しています。問題は、このエラーが一貫していないことです。アプリを起動すると発生しますが、たまにしか発生しません。そのため、何が原因なのかわかりません。
エラー ログで冗長な質問をして申し訳ありませんが、別の質問方法が見つかりませんでした。
エラーログは次のとおりです。
そして、これが起こっているコードを以下に示します。
ご参考までに、エラー ログの 74 行目 (より具体的には、これは、次のコード行をat com.myproject.android.ImageDownloaderThread.queueImage(ImageDownloaderThread.java:74)
参照しています。.obtainMessage(MESSAGE_DOWNLOAD, pos, 0, url)
queueImage()
編集
Loopの回答の提案によると、呼び出されたときにmHandler
nullですqueueImage()
。では、呼び出しを実行する前mHandler
に初期化されることを保証するにはどうすればよいですか?onLooperPrepared()
queueImage()
android - バックグラウンド スレッドで行われたジオロケーション リクエストにより、メイン スレッドがフリーズする
アプリケーションの次の作業フローがあります。メイン アクティビティには、クリック後に 2 番目のアクティビティを開始するボタンがあります。2 番目のアクティビティにはTextView
、指定されたジオポイントにある都市を示す があります。この都市を見つけるために、バックグラウンド スレッドで作成するGeocoderにリクエストを送信します。
私が期待すること: 2 番目のアクティビティが (ほぼ) すぐに開始され、バックグラウンド スレッドが要求を終了すると、UI スレッドがTextView
コンテンツを更新します。
何が起こるか: 2 番目のアクティビティは、そのジョブが終了したときにのみ開始されます。Geocoder
Wi-Fi をオフにしてボタンをクリックできることを明確にするために、5 ~ 6 秒Geocoder
待ち、ジオポイントを取得できなかったことを示すメッセージがログに表示された直後に、2 番目のアクティビティが起動します。
私が間違っていることは何ですか?関連するコードを以下に示します。完全なサンプル プロジェクトはgithub にあります。
android-handlerthread - スレッドの作成後にハンドラ スレッド インスタンスが null になる
ハンドラー スレッド インスタンスを使用してスレッドを終了しているときに、null ポインター例外が発生します。作成後にインスタンス値が null になります。変数を静的にすると、この問題に直面しませんでした。ハンドラー スレッド インスタンスが作成後に null になる理由について、誰か説明してもらえますか。以下のコードで、私の問題について簡単に説明します。
これが私のハンドルメッセージメソッドです:
java - Android での HandlerThread の安全性
わかりました、これは私が尋ねる必要がないと思った質問ですが、それは長い時間か何かのどちらかですが、私の心はぼやけているのでここに行きます.
HandlerThread、Looper、および Handler を使用したクラスの作成:
したがってmRunning
、両方のスレッド (メインとルーパー) からアクセスされます。そのため、アクセスを同期する必要があります。あなたならどちらを選びますか?変数を揮発性にし (両方のスレッドが最新のローカル値を持つように)、isRunning
メソッドを同期させますか? または経由で変数にアクセスしますsynchronized(mRunning){...}
か?
最後に、release
メソッドの実装、それは標準ごとですか? または、他の方法を選択しますか?
android - HandlerThread null 例外 - Android
このようにアプリで ThreadHandler を使用していますが、
そして、私は onCreate() でそれを初期化します
問題は、結果を待っている別のアクティビティを開始する必要がある場所に何かを追加する必要があったため、結果のアクティビティを開始するときに onActivityResult が onCreate の前に呼び出されるため、以下に示すように初期化/使用する必要があったことです。 、今回はエラーが発生しています
.
スレッドが初期化されていないようですが、ここで何が欠けていますか?
編集1、
ここで問題について話し合った後、ハンドラーが初期化されるのに少し時間がかかるようです。私はこれを行いました。醜いですが、機能しています。