Как я могу отключить поток не используется? - PullRequest
3 голосов
/ 21 марта 2012

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

Какими способами это можно сделать в Android?Пожалуйста, позвольте мне выслушать ваши знания.Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

да, есть простой шаблон для этого. Вы запускаете свою ветку в onResume(), а останавливаете ее в onPause().

в вашем потоке работает, у вас есть цикл, как,

@Override
public void run() {
    while (mRunning) {
      // re-try server
    }
}

в вашей активности переопределяет onResume () как,

@Override
protected void onResume() {
    super.onResume();

    mRunner = new Runnable { .... );
    new Thread(mRunner).start();
}

переопределить onPause (), чтобы остановить поток,

@Override
protected void onPause() {
    super.onPause();

    if (mRunner != null) {
      mRunner.setRunning(false);
      mRunner = null;
    }
}

это, конечно, останавливает цикл, run() выходит, и поток завершается.

В общем, вы следуете этому шаблону для любого слушателя, которого вы регистрируете или запускаете. установите его на onResume(), и сверните на onPause().

0 голосов
/ 21 марта 2012

вы не можете уничтожить ... только андроид остановит поток, когда потребуется ... вы не можете остановить или уничтожить его .. вместо этого попробуйте вот так ... установите какой-нибудь флаг в потоке ... чтобы проверить, когда он должен работать и когда ондолжен прекратить .. вот так ...

 void run()
{
 while(bool){
   //My code 
 }
 }

теперь в состоянии остановки вашей активности измените значение bool на false ..

@Override
 protected void onStop() {
  // TODO Auto-generated method stub
  super.onStop();
bool=false
   }
...