передача данных из потока Android в активность, которая не создала поток - PullRequest
0 голосов
/ 03 июня 2011

У меня есть фоновая тема для Android, создатель которой давно отсутствует. Но поток продолжает работать и регистрировать данные все время. Я хочу передать или отправить эти данные текущей текущей деятельности, которая не создала поток.

Что мне делать? Google? Это поднимает вопрос о передаче работы на задний план, чтобы не блокировать основной поток пользовательского интерфейса. Это не то, что я хочу. Я хочу передать / отправить данные новому текущему действию.

Ответы [ 3 ]

1 голос
/ 03 июня 2011

Обычно, если вы создаете фоновый поток такого рода, вы хотите использовать Сервис для удержания потока. В своей деятельности вы просто привязываетесь к службе, а когда получаете экземпляр службы, вы можете передать ему обработчик. Затем поток в сервисе может получить доступ к обработчику и отправить сообщения через обработчик в действие. Когда действие завершит вас unbind(), очистите обработчик и его, как если бы вы никогда не были там.

0 голосов
/ 03 июня 2011

ОК, так что этот поток журналирования движется сам по себе, помещая ввод в какой-либо файл диска или что-то в этом роде. Если какой-то другой поток хочет «перехватить» эти данные, он должен дать сигнал потоку журналирования вызвать что-то еще с данными, а также зарегистрировать их. Поток журналирования обычно ожидает в некоторой входной очереди что-то для записи, да? Если это так, отправьте потоку сообщение в его входной очереди, чтобы сказать ему вызвать метод XXXX со всеми данными, которые должны быть зарегистрированы. Поток ведения журнала может хранить список всех событий, вызываемых при каждом действии ведения журнала.

Это имеет смысл? По сути, это расширение того, что предлагает Мари. Поток регистратора получит сообщения и включит какое-либо поле перечисления 'Ecommand' в сообщении. Псевдо-Паскаль:

case inMessage.com и из: ElogString: logThis (inMessage.logString); EaddNotification: notifierList.add (inMessage.event); EdeleteNotification: notifierList.delete (inMessage.event); конец;

Функция 'logThis' записывает logString в файл на диске и затем вызывает каждое событие в notifierList с данными.

Имеет ли это смысл? Это было, когда я это написал, но сегодня вечером был на аббатском эле (5%).

Rgds, Martin

0 голосов
/ 03 июня 2011

ок, ответ очень прост, используйте Handler и продолжайте передавать этот обработчик методам, которые вы используете обработчик, тогда он будет вашим соединителем к основному действию и сможет также при необходимости изменить GUI, как указано ниже:

final Handler someHandler=new Handler(){
public void handleMessage(Message msg)
{    switch(msg.what){
        case 0: dosomething(); break;
        case 1: dosomething(); break;
        case 2: dosomething(); break;
     }
}

объявляйте этот обработчик так же, как вы объявляете любой метод, не вкладывайте его ни в какой метод каждый раз, когда вам нужно передать некоторые данные в основное действие или простой вызов GUI для обработчиканапример:

public void downLoadData(Handler h)
{
    h.sendEmptyMessage(34);
    someThread=new threadClass(h);
}

и так далее ...

надеюсь, что это поможет, С уважением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...