#java #android #multithreading #android-asynctask
#java #Android #многопоточность #android-асинхронная задача
Вопрос:
я новичок в асинхронной задаче Android
у меня действительно есть один простой вопрос.. пожалуйста, скажите мне, где искать, если этот вопрос задавался раньше
я использую AsyncTask
мой doInBackground в этой asynctask используется для POST-запроса на мой собственный сервер
но иногда, когда мой сервер не работает, возможно, из-за электричества или другой проблемы,
эта асинхронная задача будет загружаться вечно
и пока asynctask все еще выполняется, я открываю свой компьютер, и сервер снова запущен, но асинхронная задача все еще выполняется и загружается вечно, пока я не закрою программу и не запущу обратно
я не хочу, чтобы мой пользователь испытывал это
я думаю, то, что я хочу, это
создание асинхронной задачи для запуска doInBackground примерно на 20 секунд, и через 20 секунд, если результата по-прежнему нет, я что-нибудь сделаю
как мне это сделать?
должен ли я создать еще один поток на эти 20 секунд? или есть какой-нибудь таймер, который можно установить в asynctask..
спасибо ранее..
Ответ №1:
Вы должны добавить время ожидания для сетевой операции. Таким образом, при превышении этого времени ожидания будет выдано исключение.
Например, при использовании DefaultHttpClient
это было бы что-то вроде:
HttpParams httpParameters = client.getParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(httpParameters, SOCKET_TIMEOUT);
Если это HttpUrlConnection
вместо этого используйте:
connection.setConnectTimeout(CONNECTION_TIMEOUT);
connection.setReadTimeout(SOCKET_TIMEOUT);
где CONNECTION_TIMEOUT
и SOCKET_TIMEOUT
указаны в миллисекундах.