実行中のコードがメインスレッド(UIスレッド)で実行されているかどうかを確認するにはどうすればよいですか?
SwingではisEventDispatchThread
メソッドを使用します...
SDKにそのためのメソッドがあるようには見えません。チェックは ViewRoot
クラスで行われ、Thread.currentThread()
を、コンストラクターで割り当てられているが公開されていないクラスメンバーと比較することで行われます。
このチェックが本当に必要な場合は、実装するためのいくつかのオプションがあります。
post
ビューへのRunnable
とチェックThread.currentThread()
Handler
を使用して同じことを行う一般的に、正しいスレッドにいるかどうかはcheckingではなく、確認するだけコードが常に実行されるようにしますUIスレッド上(2または3を使用)。
Looper.getMainLooper()。getThread()を使用してUIスレッドを取得します。次の式を使用して、それが現在のスレッドであるかどうかを確認できます。
Looper.getMainLooper().getThread() == Thread.currentThread()
次の場合はUIスレッドです。
Looper.myLooper() == Looper.getMainLooper()
ソースAOSPソースコード: ManagedEGLContext.Java#L100
、 SharedPreferencesImpl.Java#L470
、 Instrumentation.Java#L1650
など 。
runOnUiThread を使用することもできます。UIスレッドで実行されるrunnableのみが必要です
メインスレッドにいるかどうかを知りたい場合は、次を試してみてください。
Context c = **Get a Context**;
Thread.currentThread() == c.getMainLooper().getThread();
もちろん、私は間違っている可能性があり、これはあなたのアプリを完全に爆破する可能性があります。