2

ハンドラーを作成するスレッドがあります。スレッドはサービスから呼び出されます。問題は、サービスから呼び出されたため、Activity.runOnUiThread()を使用できないことです。アクティビティではなくコンテキストにのみアクセスできます。

ハンドラーを作成すると、このエラーが発生します。

11-09 13:34:52.355: W/System.err(20974): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
11-09 13:34:52.359: W/System.err(20974):    at android.os.Handler.<init>(Handler.java:121)

コードは次のとおりです。

public void runTask() {


        Handler handler = new Handler() {
            public void handleMessage(Message msg) {
                //HANDLER CODE
            }
        };

        handler.sendEmptyMessage(0);

    }

たくさんのステートメントを削除したので、コードは奇妙に見えるかもしれません。

4

1 に答える 1

1

ハンドラーは、そのスレッドにルーパーを必要とします。スレッドの初期化中に呼び出すだけLooper.prepare()で、準備ができたら、でルーパーを起動しLooper.loop()ます。

public void runTask() {
    Looper.prepare();

    Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            //HANDLER CODE
        }
    };

    Looper.loop();
    handler.sendEmptyMessage(0);
}

または、ルーパーを初期化するHandlerThreadを使用することもできます。

于 2012-11-09T18:54:41.530 に答える