#android
#Android
Вопрос:
У меня есть приложение, в котором мы предоставляем удаленный пользовательский интерфейс (который содержит все кнопки для управления медиа-сервером).
Проблема в том, что когда мы нажимаем любую кнопку, мы выполняем соответствующее действие, которое является очень длительной сетевой операцией UPNP.
итак, когда мы непрерывно нажимаем кнопки, наконец, устройство выдает исключение ANR и принудительно закрывает приложение. Я провел некоторое исследование этого исключения ANR и, наконец, обнаружил, что мы можем использовать Thread или AsyncTask для решения этой проблемы.
Но в моем приложении, поскольку мы предоставляем так много кнопок, когда пользователь непрерывно нажимает кнопки, это может привести к созданию большого количества потоков, созданных в приложении.
Пожалуйста, дайте мне свои предложения по этому поводу.
Как преодолеть эту проблему?
Спасибо
Ответ №1:
Одним из многих преимуществ использования AsyncTask является то, что он управляет потоками (и объединением потоков) для вас. Поэтому, если вы используете AsyncTask, у вас не должно возникнуть проблемы с созданием слишком большого количества потоков.
Кроме того, если вы обеспокоены созданием слишком большого количества асинхронных задач, подумайте о том, чтобы поместить задачи в переменную-член (например, в очередь или ArrayList) и отслеживать их состояние. Если один из них все еще обрабатывается, возможно, нет необходимости запускать другой. Или вы можете удалить задачи, результаты которых больше не нужны.
Ответ №2:
Просто отслеживая нажатие кнопки в переменной-члене и используя одну AsyncTask, вы можете выполнить эту длительную операцию в очереди.
Если возможно, просто избегайте многопоточных операций для этих операций.