Вместо того, чтобы начинать новый поток для каждого действия обновления, я бы создал один поток для всей фоновой загрузки, которая зацикливает и загружает контент, как выстроенный в очередь.Это гарантирует, что вы не загружаете контент одновременно, а также экономит ресурсы.
В графическом интерфейсе вы просто ставите в очередь запрос на обновление всякий раз, когда пользователь просит вас, и можете прервать текущую загрузку, вызвав HttpRequestBase.abort
в экземпляре метода http.Фоновый поток должен получить и поймать SocketException
и перейти к следующему запросу в очереди.
Чтобы завершить фоновый поток, вам просто нужно завершить его цикл.Вы можете использовать классы Looper
и Handler
, чтобы помочь вам со всем вышеперечисленным, класс HandlerThread
, который вы упомянули, является просто удобным классом для создания потока, которыйимеет Looper
.
Проблема с interrupt
в потоке состоит в том, что он не избавит вас от блокирующего запроса ввода-вывода и правильной обработки InterruptException
может быть сложным.Поэтому, в зависимости от ситуации, я бы сказал, что да, лучше завершить поток, вернувшись из метода run
.