#android #user-interface #android-3.0-honeycomb
#Android #пользовательский интерфейс #android-3.0-honeycomb
Вопрос:
В моем приложении мне приходится выполнять множество длительных задач. Обычно они получают доступ к сети и выполняют некоторые действия на удаленном сервере. Очевидно, что это асинхронные задачи. Теперь вопрос в следующем: какой считается удобным способом уведомления пользователя о том, что что-то происходит?
Я использовал решение, которое выводит модальное диалоговое окно с кругом загрузки по умолчанию, неопределенным, анимирующим вращение во время выполнения задачи. Это просто ужасно, пользователь не может взаимодействовать с приложением в течение этого времени — диалог является модальным — и это чертовски навязчиво.
Какое решение вы, ребята, предлагаете для предоставления отзывов пользователей для:
A. асинхронная задача, запускаемая нажатием кнопки в listelement ListView в ListView? B. асинхронная задача, запускаемая нажатием пункта меню? (из панели действий или обычного меню, это не имеет значения)
Я бы предпочел, чтобы решение было ненавязчивым, но пользователь должен заметить, что что-то действительно происходит.
Ответ №1:
Большинство приложений, которые я видел, используют неопределенный индикатор выполнения, расположенный где-то в пользовательском интерфейсе. Таким образом, пользователь видит, что что-то работает, но все еще может взаимодействовать со всеми другими разделами пользовательского интерфейса при выполнении действия.
Ответ №2:
Для A я бы, вероятно, оставил место в элементе ListView для индикатора выполнения. Затем обновите индикатор выполнения для этого элемента.
Для B, я бы подумал, что что-то вроде постоянного уведомления с индикатором выполнения было бы довольно идеальным решением.
Ответ №3:
В моем приложении мне приходится выполнять множество длительных задач. Обычно они получают доступ к сети и выполняют некоторые действия на удаленном сервере. Очевидно, что это асинхронные задачи.
Из описания следует, что это может быть не тот случай, когда использование AsyncTask является правильным подходом. Что делать, если активность приложения, запустившего AsyncTask, остановлена или уничтожена, но передача данных завершена на 95%? Следует ли отменить прогресс? Была ли транзакция атомарной?
Я настоятельно рекомендую посмотреть презентацию Вирджила Добьянски в Google I / O 2010 о клиентских приложениях Android REST для Android, в которой он описывает разработку приложения для обработки таких данных и сетевых коммуникаций. Он является автором официального приложения Twitter для Android.
Комментарии:
1. Спасибо за предупреждение, я в курсе этих проблем, и я использую как IntentService для важных задач, так и AsyncTasks для менее важных, которые необходимо завершить, когда действие будет уничтожено.