Периодическое сообщение в теме - PullRequest
0 голосов
/ 01 июля 2011

У меня есть активность (myActivity) и поток (MyThread), оба с обработчиком, который позволяет мне отправлять сообщения между потоком пользовательского интерфейса и myCustomThread. Теперь я хотел бы периодически (10 секунд) вызывать сообщение ALIVE потока MyThread из MyActivity. Как мне этого добиться?

MyActivity:

public void onResume()
{
    super.onResume();
    this.thread                 = new MyThread(activityHandler);
    this.threadHandler  = this.thread.gethandler();

    threadMessage           = this.threadHandler.obtainMessage();
    threadMessage.what  = AUTH;
    this.threadHandler.sendMessage(threadMessage);
}

MyThread:

@ Override

public void run()
{

        Looper.prepare();

        this.threadHandler = initHandler();

        this.message        = this.activityHandler.obtainMessage();
        this.message.what   = CONNECTED;
        activityHandler.sendMessage(this.message);

        Looper.loop();

}

private Handler initHandler()
{
    return new Handler() {

        public void handleMessage(Message msg)
        {
            switch(msg.what)
            {
                case AUTH : 
                {
                    auth();
                    break;
                }

                case ALIVE :
                {
                    sendAlive();
                    break;
                }
            }
        }
    };
}

Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 05 июля 2011

Правильное решение действительно зависит от того, что вы пытаетесь соединить ...

Этот - это пошаговое руководство по выполнению действия над таймером, а также о том, как использоватьотложенная запись (предпочтительный способ выполнения по расписанию, потому что он не использует поток для таймера).Это хорошая запись, и они включают в себя почему.

Надеюсь, это поможет.

0 голосов
/ 05 июля 2011

Я наконец-то нашел решение с sendEmptyMessageDelayed (ALIVE, 10000)

Короче говоря, я вызываю один раз ALIVE из своего потока пользовательского интерфейса, и в конце метода sendAlive () я отправляю delayedMessage в сам поток, чтобы повторно вызвать ALIVE через X миллисекунд.

С этим решением не требуется новая нить или таймер.

...