Правильное использование Messenger в неизвестной теме - PullRequest
0 голосов
/ 12 марта 2019

Фон

У меня есть Android.app.Service S и класс A, который исключает использование android.os.Messenger для двунаправленной связи с S.

На данный момент я застрял в том, как инициализировать Messenger, который будет обрабатывать ответы от службы.

Рассмотрим следующую схему:

public class A implements Handler.Callback {
    private Messenger messengerOut; //initialized via S's IBinder
    private Messenger messengerIn;  //How to init?

    void doSomething() {
        Message message = acquireMessage();
        message.replyTo = this.messengerIn;
        this.messengerOut.send(message);
    }

    private Message acquireMessage(){
        //...
    }

    @Override
    public void handleMessage(Message msg){
        //...
    } 
}

Задача

Простой ответ будет таким: messengerIn = new Messenger(new Handler(this)); Но A является вспомогательным классом и не налагает никаких последствий на потоки, в которых он работает. Таким образом, неизвестно, есть ли у него работающий Looper, который будет автоматически использоваться new Handler(Handler.Callback).

Таким образом, остается следующий вопрос. Как получить действительный петлитель для обработчика?

...