从服务中的线程更改主活动UI

时间:2011-09-02 15:32:28

标签: android multithreading user-interface service handler

我一直在寻找一些好的文档或一个很好的例子。我需要从我在后台运行的服务中的工作线程更改我的主活动UI。据我所知,我知道我想与某种Handler合作,但我不确定如何处理这个问题。

有没有人有任何想法或好的例子可以指导我?我正在更改的UI元素是一个TextView,它只是通知用户线程的状态。

感谢您的帮助。

4 个答案:

答案 0 :(得分:7)

您所要做的就是在UI线程上创建Handler

private Handler serviceHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        someFunctionInTheUIThread();
    }
};

然后将其传递给您的服务。您可以在服务中拥有这样的功能:

public void registerHandler(Handler serviceHandler) {
    handler = serviceHandler;
}

然后像这样传递处理程序:

theService = ((LocalBinder) service).getService();
theService.registerHandler(serviceHandler);

然后发回信息:

Message msg = handler.obtainMessage(IDENTIFIER, "Message or data");
handler.sendMessage(msg);

答案 1 :(得分:2)

查看服务绑定。或者您可以在主活动中使用BroadcastReceiver从服务接收广播。

答案 2 :(得分:1)

您必须使用sendBroadcast(意图)从您的服务发送意图,并在您的活动中设置BroadcastReceiver

答案 3 :(得分:1)

在主活动中的onCreate()方法中创建一个处理程序。这将在UI线程中创建一个处理程序。然后使用工作线程中的这个处理程序,调用你需要的任何东西来更新TextView。