我一直在寻找一些好的文档或一个很好的例子。我需要从我在后台运行的服务中的工作线程更改我的主活动UI。据我所知,我知道我想与某种Handler合作,但我不确定如何处理这个问题。
有没有人有任何想法或好的例子可以指导我?我正在更改的UI元素是一个TextView,它只是通知用户线程的状态。
感谢您的帮助。
答案 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。