2

サービスを作成しました。サービス間通信には、メッセンジャーとハンドラーを使用しています。

public class LocalHandler extends Handler
{
    public void handleMessage(Message message)
    {
        String msg = message.getData().getString("MyString");
        String serv_msg = message.getData().getString("FromService");
        Toast.makeText(getApplicationContext(), msg+serv_msg,
                Toast.LENGTH_SHORT).show();
    }
}
final Messenger myMessenger = new Messenger(new LocalHandler());

ここで、メッセンジャーの MessageQueue にあるメッセージの数を特定の時点で確認したいと思います。

ウェブを検索しましたが、トピックに関するものは見つかりませんでした。

メッセージのリスト/カウントを取得する方法についての手がかりはありますか?

4

1 に答える 1

3

Looperのキューをスパイする方法に関する Square からのブログ投稿があります: https://corner.squareup.com/2013/12/android-main-thread-2.html

main に対して行う方法は次のLooperとおりです。

public class MainLooperSpy {
  private final Field messagesField;
  private final Field nextField;
  private final MessageQueue mainMessageQueue;

  public MainLooperSpy() {
    try {
      Field queueField = Looper.class.getDeclaredField("mQueue");
      queueField.setAccessible(true);
      messagesField = MessageQueue.class.getDeclaredField("mMessages");
      messagesField.setAccessible(true);
      nextField = Message.class.getDeclaredField("next");
      nextField.setAccessible(true);
      Looper mainLooper = Looper.getMainLooper();
      mainMessageQueue = (MessageQueue) queueField.get(mainLooper);
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  public void dumpQueue() {
    try {
      Message nextMessage = (Message) messagesField.get(mainMessageQueue);
      Log.d("MainLooperSpy", "Begin dumping queue");
      dumpMessages(nextMessage);
      Log.d("MainLooperSpy", "End dumping queue");
    } catch (IllegalAccessException e) {
      throw new RuntimeException(e);
    }
  }

  public void dumpMessages(Message message) throws IllegalAccessException {
    if (message != null) {
      Log.d("MainLooperSpy", message.toString());
      Message next = (Message) nextField.get(message);
      dumpMessages(next);
    }
  }
}
于 2015-03-16T10:53:20.330 に答える