在从服务调用的线程内使用处理程序

时间:2012-11-09 18:51:46

标签: android android-service android-handler

我有一个创建处理程序的线程。从服务调用该线程。问题是因为它从服务调用,我不能使用Activity.runOnUiThread()。我只能访问Context not Activity。

创建处理程序时出现此错误,

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);

    }

代码可能看起来很奇怪,因为我删除了一堆语句。

1 个答案:

答案 0 :(得分:1)

处理程序在其主题中需要Looper。只需在初始化线程时调用Looper.prepare(),并在准备好时使用Looper.loop()启动Looper。

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

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

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

或者您也可以使用HandlerThread为您初始化Looper。