Intereting Posts
Как отключить кнопку телефона телефона на Android с помощью Jquerymobile, PhoneGap Как получить программный адрес Ip ​​с MAC-адреса на Android? Как проверить, что тело почти перестало двигаться в libgdx + box2d Работа с изображениями в разработке приложений для Android Как изменить цвет текста ActionBar с помощью AppCompat Создание Утилиты, чтобы каждый раз получать путь к Внешнему Съемному хранилищу С помощью библиотеки поддержки v7 эта ошибка: Тип android.support.v4.app.TaskStackBuilder $ SupportParentable Как использовать RoundedBitmapDrawable LinearyLayout не будет изменять размер, если его высота равна 0 Как заставить выйти из приложения Android и перезапустить его? Ошибка Android: невозможно добавить окно – токен null не для приложения Избавление от градиента в верхней части Activity (Android) Плагин iBeaconGap Cordova на базе библиотеки Android RadiusNetwork Горизонтальные конвертеры RadioButtons, если они слишком длинны для экрана Разница между setBackgroundDrawable () и setBackground ()

Избегайте блокировки экрана, пока отображается индикатор ProgressDialog

Я хочу показать progressBar, в то время как некоторые инструкции выполняются в фоновом режиме, но я не хочу блокировать экран. Этот код блокирует экран:

private class ConvertDataInBackground extends AsyncTask<Params, Void, Boolean> { private MyProgressDialog mProgressDialog; @Override public void onPreExecute() { if(mProgressDialog == null) mProgressDialog = MyProgressDialog.show(mActivity, null, null); } @Override protected Boolean doInBackground(Params...params) { boolean conversionResult = executeConversion(params[0].item1, params[0].item2, params[0].item3); return conversionResult; } @Override protected void onPostExecute(Boolean result) { try { if(mProgressDialog.isShowing()) mProgressDialog.dismiss(); if(result) { Toast toast = Toast.makeText(mActivity, R.string.conversion_result, Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } } catch (Exception e) { e.printStackTrace(); } } } 

Выполнение команды в фоновом режиме может занять некоторое время, и я хочу, чтобы пользователь мог работать с интерфейсом. Знаете ли вы, что мы можем работать с интерфейсом, а progressDialog отображается вверху?

Диалоги в Android обычно являются модальными. Вы можете попробовать создать диалог, а затем добавить FLAG_NOT_TOUCH_MODAL к его параметрам окна, но я не уверен, что он сработает. Идея этого будет примерно такой:

 ProgressDialog dialog = new ProgressDialog(this); dialog.setMessage(...); dialog.setTitle(...); dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); 

Обратите внимание, что может быть проще просто добавить ProgressBar в макет своей активности и показать его при необходимости, а не создавать диалог – это, по сути, то, что рекомендует документация Google. В руководстве разработчика Android по диалогам это можно сказать:

Избегайте ProgressDialog

Android включает еще один диалоговый класс под названием ProgressDialog который показывает диалог с индикатором выполнения. Однако, если вам нужно указать загрузку или неопределенный прогресс, вместо этого вы должны следовать руководящим принципам проектирования для Progress & Activity и использовать ProgressBar в своем макете.

Я думаю, что в вашей деятельности вы должны указать флаг FLAG_KEEP_SCREEN_ON:

  getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

Для меня это сработало.