Решение этой проблемы заключается в упрощении метода doInBackground
, выполняющего всего один вызов sendCommands()
:
class SendCommandTask extends AsyncTask<Object, Void, Void> {
@Override
protected Void doInBackground(Object[] param) {
try {
sendCommands();
}
catch (Throwable e)
{
Log.e(this.getClass().getName(), e.getMessage());
}
return null;
}
}
Объекты AsyncTask создаются и выполняются через структуру повторяющихся потоков:
timerTask = new Runnable() {
@Override
public void run() {
new SendCommandTask().execute();
sendCommandsTimerHandler.postDelayed(this, UPDATE_DELAY);
}
};
в данном конкретном случае простой таймер.Обратите внимание, что все это было написано, чтобы избежать возникновения исключений из-за использования сетевых ресурсов внутри вызовов SendCommands()
.В моем предыдущем коде эти вызовы выполнялись прямо в том же таймере, что и выше.Теперь я должен обернуть все, как это ... выглядит для меня бессмысленно.