Требуется остановить поток, выполняющий некоторые загрузки.
Код ниже работает нормально, когда у меня есть только stopNow = true;
, и никаких блокировок не происходит.
Я создаю boolean stopNow = false;
как поле в моем IntentService.Is BroadcastReceiver достаточно асинхронный, чтобы сделать эту работу
Поскольку stopNow
работать только тогда, когда соединение продолжается в while
петле
, но он не работает, если f.ex stales соединения и начинают блокировать.
Я хотел бы добавить этот код, чтобы действительно остановить блокировку.
if(socket != null){
socket.shutdownOutput();
socket.shutdownInput();
}
Вопрос заключается в том, если это асинхронное так, если выполнение продолжается в цикле
while
stopNow = true;
остановит его, и я могу поставить сон (5000) после stopNow = true;
и тогда if(socket != null)
будет верно только если stopNow
не повлиял.
надеюсь вы меня ..
BroadcastReceiver
, которые расположены внутри run()
:
private class MyIncomingListener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Consts.COM_CARLSBERG_STOPOUTGOING)) {
String b = intent.getStringExtra(Consts.COM_CARLSBERG_BATCHUUID);
if(b != null){
if(b.equals(batch.batchUuid)){
stopNow = true;
// sleep(5000) wait for stopNow to take effect
// if socket=null then stopNow did it's job
// if socket is alive then there is blocking to unblock
try{
if(socket != null){
socket.shutdownOutput();
socket.shutdownInput();
}
} catch (Exception e) {}
}
}
}
}
}
Спасибо человеку, что не знаю, что сказать сейчас :) – Erik