2013-10-24 1 views
2

Я создал службу и для межобщинного общения Я использую Messenger с Handler.Получить список ожидающих сообщений от мессенджера/обработчика в android

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 мессенджера.

Я искал в Интернете, но не мог найти что-либо по этой теме.

Любые указания о том, как я могу получить список/количество сообщений?

ответ

2

Существует сообщение в блоге от площади о том, как следить за Looper «s очереди: https://corner.squareup.com/2013/12/android-main-thread-2.html

Вот как они делают это для главного 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); 
    } 
    } 
} 
Смежные вопросы