スレッドで作成されたハンドラーにアクセスしているときに、null ポインター例外が発生することがあります。
私は2つのアプローチを使用しています。
1 つはスレッドを使用したサービスで、ハンドラーを作成し、サービス メソッドでアクセスします。2つ目は、アクティビティで作成されたスレッドで、スレッドを作成し、開始し、ハンドラーを作成しています。
問題は非常に単純です。ハンドラーはメインスレッドに対して非同期で作成されます。そして、私はメイン(GUIスレッド)でアクセスしているので、作成することもあれば、取得時にnullになることもあります。
私はGUIスレッド while(handler == null){ } で作ることができましたが、それは本当に悪い解決策です。これを行うエレガントな方法を探しています。
すべてがメインスレッドにあります。
Thread t = new Thread(new Runnable {
Looper.prepare();
handler = new Handler();
Looper.Loop();
}
handler.post(new Runnable{}) //at this point sometimes handler is still null.
and it is created like few ms later. But still at this point i need valid handler
to background thread