Хотел остановить поток, делающий некоторые загрузки.
Приведенный ниже код работает нормально, когда у меня есть только stopNow = true;
и не происходит блокировка.
Я создаю boolean stopNow = false;
как поле в моем IntentService.
Так как stopNow
работает только тогда, когда соединение продолжается в цикле while
, но не работает, если соединение f.ex устарело и начинает блокироваться.
Я хотел добавить этот код, чтобы действительно остановить блокировку.
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) {}
}
}
}
}
}