我正在编写一个从休息界面加载数据的应用程序。 对于此任务,我使用由活动调用的服务。这些电话是基于“消息”。我这样做是因为我认为只是发送消息不会导致UI线程的阻塞(我使用了很多来自android文档的RemoteService示例代码)。但感觉如果发送消息的UI线程仍然被阻止(ui不会更新,直到程序流,由消息引起停止)。
我对消息系统的整个想法有什么不对吗?我需要在一个单独的线程中启动服务来解决这个问题吗?!
答案 0 :(得分:1)
Message
由绑定到您用于发送消息的Handler
的线程处理。如果您从UI线程创建了Handler
,那么您的消息将在UI线程中处理。您可以使用HandlerThread
,也可以使用IntentService
。
HandlerThread
是具有自己的looper的线程,您可以从中创建新的处理程序:
thread = new HandlerThread("worker");
thread.start();
handler = new Handler(thread.getLooper());
IntentService
有工作线程,每个启动命令都是从onHandleIntent(Intent)
答案 1 :(得分:1)
使用处理程序发送消息不会阻塞,具体取决于您对其执行的操作。如果您要向服务发送消息,然后立即在服务器中发送http请求,那么它将阻止。如果您发送消息,那么让服务只是在操作栏中发布通知,然后它就不会阻止。
服务在主UI线程上运行。它们不在后台运行,因此您在服务中执行的任何操作都将在UI线程上运行,并且如果服务执行了大量工作,则可以阻止它。