私のコードを実行しているスレッドがUIスレッドかどうかを知るには、Androidには何か方法はありますか?スイングでは、私がUIスレッドにいるかどうかを教えてくれるSwingUtilities.isEventDispatchThread()
がありました。私にこれを知らせる機能がAndroid SDKにありますか?ここから借りこのスレッドがUIかどうかを知る方法
答えて
回答:How to check if current thread is not main thread
Looper.myLooper() == Looper.getMainLooper()
どれAndroidアプリは唯一のUIスレッドを持っているので、あなたがどこかのonCreateなどのアクティビティコールバックで()をチェックし、そのIDを保存でき、後でそのスレッドのIDと格納されているIDを比較するだけです。とにかく
mMainThreadId = Thread.currentThread().getId();
あなたはUIスレッド上で何かをして
上で実行することが保証されてmActivity.runOnUiThread(new Runnable() { @Override public void run() { ... } });
を使用しての活動への参照を持っているしたい場合は、チェックを省略することができますUIの場合は現在のスレッド、UIスレッドの場合はキューに入れられます。
実際にはAndroidアーキテクチャのため、すべてのアクティビティはメインスレッド、つまりUIスレッドで実行されます。だから、あなたがアクティビティをコーディングしているとき、あなたのアクティビティにあるものはすべてUIスレッドにあります。
ハニーコムでは、メインスレッドでネットワークコールを行っているときにエラーが追加されているため、UIが完全にブロックされます。
デフォルトでは、実際には常にUIスレッドで作業しています。 別のこと:明示的に他のスレッドにあることを要求しない限り、サービスはそのアプリケーションのアクティビティと同じスレッドで動作します。
だから、どうしたらいいですか?
- アクティビティで重い計算が必要な場合は、 1つの解決策はAsyncTask(別のスレッドを簡単に使用できるように設計されたクラス)を使用することです。 onExecute()のコードは別のスレッドで実行されます(ただし、メインスレッドでpostExecuteが実行されるように注意してください)。もう1つは、AsyncTaskが実際には適応されていないときに手動で新しいスレッドを開始することです。
- 高価なバックグラウンドタスクを実行するサービスを作成する場合は、マニフェストのandroid:process = ":my_process"属性を使用して別のスレッドで実行するようにします。この分離されたサービスと通信するには、AIDLを作成する必要がありますが、複雑な作業ではありません。
- たとえば、MediaPlayerのような多くのオブジェクトには、メソッドのAsyncバリエーションがあります。常にそれらを使用するようにしてください。
チェックしたいところにブレークポイントを設定し、ヒットしたら、UIと対話できるかどうか(つまり、UIがフリーズしていないかどうか)を確認します。 UIと対話できない場合はUIスレッドにあり、そうでない場合はバックグラウンドスレッドになります。
はい、方法があります。 メインスレッドのスレッドオブジェクトに対して現在のスレッドオブジェクトを確認します。メインルーパーは常にUIスレッド内にあります。
boolean isOnUiThread = Thread.currentThread() == Looper.getMainLooper().getThread();
- 1. UIスレッドをバックグラウンドから通知スレッド
- 2. スレッドがデッドロック状態にあるかどうかを知る方法?
- 3. UIがX時間アイドルであるかどうかを知る方法?
- 4. スレッドがJavaで終了したかどうかを知る方法?
- 5. UIスレッドであるかどうかを検出する方法は?
- 6. アクティブなスレッドがあるかどうかはどのように知ることができますか?
- 7. iOSの非UIスレッドからUIラベルを更新する方法
- 8. 複数のバックグラウンドワーカーが完了し、UIスレッドを更新するかどうかを確認する方法?
- 9. ウェブページのどこからフラッシュが届くか知る方法?
- 10. データがリスト内のdata.frameかどうかを知る方法
- 11. タップがビュー内か外かどうかを知る方法
- 12. node.jsでリクエストがhttpかhttpsかどうかを知る方法
- 13. ウィンドウが子ウィンドウか親ウィンドウかどうかを知る方法?
- 14. ftp_nlist ...それがファイルかフォルダかどうかを知る方法?
- 15. ライブポイントがストリーム内のどこにあるかを知る方法?
- 16. TPLスレッドがより多くの作業を要求しているかどうかを知る方法?
- 17. リポジトリがサブモジュールであるかどうかを知る方法
- 18. iOS:メールアカウントが存在するかどうかを知る方法
- 19. HTTPリクエストがBOTであるかどうかを知る方法
- 20. アプリがフォアグラウンドにあるかどうかを知る方法は?
- 21. Excelファイルが空であるかどうかを知る方法#
- 22. Selectクエリが空であるかどうかを知る方法
- 23. セルが存在するかどうかを知る方法
- 24. DNSサーバがオープンリゾルバであるかどうかを知る方法?
- 25. MySQLndがアクティブドライバであるかどうかを知る方法?
- 26. 範囲が空であるかどうかを知る方法?
- 27. クライアントが生きているかどうかを知る方法
- 28. アプリ内にトップヘッダーバーがあるかどうかを知る方法
- 29. ユーザがファイルをダウンロードしたかどうかを知る方法
- 30. あるスレッドが生存しているかどうかを知ることができますか?
なぜあなたのコードが実行されているスレッドを知る必要がありますか?それがUIスレッド用のものであれば、そこにディスパッチするだけです。 –
あなたは通常、メソッドがUIスレッドで実行されていることを知っています。特にあなたが疑うところがある場合はどうですか? – njzk2
ケースは特にありません。私のマルチスレッドコードを確実に確認する方法です。 – user1730789