从服务向UI-Thread发送消息 - 在服务处理程序中延迟的消息

时间:2012-06-19 21:09:30

标签: android multithreading user-interface service callback

我有一个从服务器提取数据的服务。我有gui的活动需要更新。

所以在不同的场合,例如信息已成功从服务器中提取,服务器必须通知活动有新信息。

为此,我实现了这个功能:

    /**
 * ServerService.class
 * 
 * Sends a message to the observer that there is a new status message to be
 * pulled from the service#
 * 
 * @param pMessage
 *            the message to be set to the public status
 */
private void signalNewStatus(String pMessage) {

    //check if there is a message at all to be signaled as new
    if (pMessage != null) {
        Log.v(tag, "signalNewStatus:" + pMessage);

        // set the message
        vStatus = pMessage;

        // start the new callback via the handler
        myMessageHandler.sendEmptyMessage(I_STATUS_UPDATE_SIGNAL);
    }
}

要处理消息,我有消息处理程序:

    private final Handler myMessageHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        Log.i(tag, "handleMessage: "+msg.what);

        switch (msg.what) {

        case I_STATUS_UPDATE_SIGNAL: {

            // Broadcast to all clients the new value.
            final int N = myCallbackList.beginBroadcast();

            for (int i = 0; i < N; i++) {
                try {
                    myCallbackList.getBroadcastItem(i).sendUpdateStatusSignal(true);

                } catch (RemoteException e) {

                }
            }
            myCallbackList.finishBroadcast();
        }
            break;

第一个函数经常调用,我可以在日志记录中看到它按时正常工作。

但是消息处理的日志记录不会立即被调用。它被延迟并最终被调用。不知何故,作为批量。

我无法弄清楚为什么会这样。其余的工作正常,消息处理完毕后,消息会在没有问题的情况下进入UI线程。

有什么建议吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

如果没有更多代码,我无法确定,但这听起来像是一个线程问题。

尝试将处理程序代码放在单独的HandlerThread中,检索服务中的处理程序并将消息发送给它。