Я знаю, что это длинный пост, но, пожалуйста, потерпите меня:)
В настоящее время я использую класс Handler для связи из дочернего потока с основным потоком пользовательского интерфейса, и я использую мою реализацию очереди сообщений для сообщений в другом направлении (от основного потока до дочернего потока).
Способ, которым дочерний узел знает, куда отправлять сообщения: в основном потоке, после того как я создаю объект-обработчик, я отправляю его ссылку дочернему элементу через мою собственную очередь сообщений, затем дочерний поток сохраняет значение ссылки и Таким образом будет знать, как отправлять сообщения в деятельности.
НО, у меня есть несколько Активностей в моем приложении, и каждая из них должна общаться с одним и тем же дочерним потоком. Объект обработчика, который я создаю в одном действии, не будет действителен в следующем действии, поэтому я делал каждый раз, когда создается новое действие (каждый раз, когда пользователь переключается между действиями), каждый раз, когда я создаю объект обработчика , точно так же, как и раньше, и отправьте ссылку на дочерний поток.
МОИ ВОПРОСЫ:
Это правильный способ сделать это?
Есть ли более простой способ сделать это? Из связи с дочерним узлом на несколько действий? За исключением использования, например, одноэлементного класса или чего-то еще, поэтому я не отправляю ссылку каждый раз через свою пользовательскую очередь, а вместо этого обновляю переменную в синглтоне.
EDIT
Вот некоторый код в соответствии с просьбой:
В методе onCreate каждой операции я делаю следующее:
...
//Create the main handler on the main thread so it is bound to the main thread's message queue.
createHandler();
//Send to the controller the msg handler of the UI thread
//Create messenger of appropriate type
Messenger mess = new Messenger(_MSGHANDLER_);
//Add the handler
mess.addContent(_HANDLERTAG_, mMainHandler);
//Add the name of this activity
mess.addContent(_ACTIVITYNAMETAG_, "RemyLoginActivity");
//Add the message to the controller's queue
controller.enqueue(mess)
...
Функция createHandler создает объект-обработчик и присоединяет конкретную функцию обратного вызова.
//Create the handler on the main thread so it is bound to the main thread's message queue
private void createHandler()
{
//Create the main handler on the main thread so it is bound to the main thread's message queue.
mMainHandler = new Handler()
{
public void handleMessage(Message msg)
{
//Get the messenger from the message
Messenger mess = (Messenger)msg.obj;
Log.i( "Remy", "ActivityMainMenu::Message from Controller: " + mess.type());
switch( mess.type() )
{
default: Log.i("Remy","OUPS::createHandler::Could not understand queue message type: " + mess.type());
break;
}
}
};
}
и, наконец, контроллер является дочерним потоком, в котором, когда он получает ссылку на обработчик, он просто сохраняет его, а затем отправляет сообщения следующим образом:
activityHandler.sendMessage( msg );
Надеюсь, я ничего не забыл.