3

サーバーからデータをプルするサービスがあります。そして、更新が必要な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 スレッドに到達します。

助言がありますか?

どうもありがとう!

4

1 に答える 1