Обработка исключений ANR

#android

#Android

Вопрос:

У меня есть приложение, в котором мы предоставляем удаленный пользовательский интерфейс (который содержит все кнопки для управления медиа-сервером).

Проблема в том, что когда мы нажимаем любую кнопку, мы выполняем соответствующее действие, которое является очень длительной сетевой операцией UPNP.

итак, когда мы непрерывно нажимаем кнопки, наконец, устройство выдает исключение ANR и принудительно закрывает приложение. Я провел некоторое исследование этого исключения ANR и, наконец, обнаружил, что мы можем использовать Thread или AsyncTask для решения этой проблемы.

Но в моем приложении, поскольку мы предоставляем так много кнопок, когда пользователь непрерывно нажимает кнопки, это может привести к созданию большого количества потоков, созданных в приложении.

Пожалуйста, дайте мне свои предложения по этому поводу.

Как преодолеть эту проблему?

Спасибо

Ответ №1:

Одним из многих преимуществ использования AsyncTask является то, что он управляет потоками (и объединением потоков) для вас. Поэтому, если вы используете AsyncTask, у вас не должно возникнуть проблемы с созданием слишком большого количества потоков.

Кроме того, если вы обеспокоены созданием слишком большого количества асинхронных задач, подумайте о том, чтобы поместить задачи в переменную-член (например, в очередь или ArrayList) и отслеживать их состояние. Если один из них все еще обрабатывается, возможно, нет необходимости запускать другой. Или вы можете удалить задачи, результаты которых больше не нужны.

Ответ №2:

Просто отслеживая нажатие кнопки в переменной-члене и используя одну AsyncTask, вы можете выполнить эту длительную операцию в очереди.

Если возможно, просто избегайте многопоточных операций для этих операций.