1

だから私はアプリ内課金を実装しようとしていますが、問題はUIスレッドでBillingHelper/ReponseHandlerを実行する必要があるということです。Screenクラスにハンドラーを作成すると、引数としてアクティビティのみを継承します。そして、OpenGLスレッドで実行すると以下のエラーが発生します。

10-16 18:36:28.500: E/AndroidRuntime(28263): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

助けてください。

4

2 に答える 2

1

ハンドラーは、投稿されたランナブルを実行するスレッド上に構築する必要があります。したがって、UIスレッドで何かを実行する場合は、UIスレッドでハンドラーを構築し、それを何らかの方法でワーカースレッドに渡す必要があります(通常、スレッドオブジェクトの構築中に、明示的にまたはクロージャーを介して)。

ただし、ショートカットがあります。このメソッドActivity.runOnUiThread()は、を受け取りRunnable、UIスレッドで実行します。ハンドラーは必要ありません。

于 2012-10-17T01:54:33.627 に答える
0

例外:Looper.prepare()がないことは明らかです。UI(メイン)スレッドを除いて、スレッドでハンドラーを使用する前に、常にLooper.prepareを呼び出す必要があります。デモコード:

Looper.prepare();
Message msg = new Message();
msg.what = 100;
handler.sendMessage(msg);

この簡単なメッセージがお役に立てば幸いです、Googleドキュメント

于 2012-10-17T01:56:11.027 に答える