消息在Android中阻止

时间:2011-09-06 13:32:12

标签: android

我正在编写一个从休息界面加载数据的应用程序。 对于此任务,我使用由活动调用的服务。这些电话是基于“消息”。我这样做是因为我认为只是发送消息不会导致UI线程的阻塞(我使用了很多来自android文档的RemoteService示例代码)。但感觉如果发送消息的UI线程仍然被阻止(ui不会更新,直到程序流,由消息引起停止)。

我对消息系统的整个想法有什么不对吗?我需要在一个单独的线程中启动服务来解决这个问题吗?!

2 个答案:

答案 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线程上运行,并且如果服务执行了大量工作,则可以阻止它。