Прогрессбар исчезает в режиме экономии заряда батареи (Android 5.x)?

Я заметил, что при включении режима энергосбережения (пользователем или автоматически) в Android 5.x индикаторы прогресса в приложении просто исчезают.

Никакой анимации, никакого статического виджета прогрессбара — просто пустое место.

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

На всякий случай — код, реализующий ProgressBar Layout:

<ProgressBar
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/refresh_bar"
    android:layout_alignParentTop="true"
    android:indeterminate="true"
    android:visibility="gone"
    android:layout_marginTop="@dimen/progress_bar_top_margin" />

И как это реализовано в моем классе фрагментов:

public class FeedFragment extends Fragment {
    ...
    // Progressbar to show refreshing state
    private ProgressBar mRefreshBar;
    ...

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

            View v = inflater.inflate(R.layout.fragment_feed, container, false);    
            ...
            // Initialize and locate Refreshing progress bar
            mRefreshBar = (ProgressBar) v.findViewById(R.id.refresh_bar);
            ...
            mRefreshBar.setVisibility(View.VISIBLE);
            ...
     }
     ...
}

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


person udenfox    schedule 05.02.2016    source источник


Ответы (2)


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

Потому что режим экономии заряда батареи продлевает срок службы батареи, поэтому вы можете использовать телефон до тех пор, пока у вас не появится возможность его зарядить. Это происходит с каждым приложением. Так что не волнуйтесь.

Как это предотвратить?

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

person Dhaval Parmar    schedule 05.02.2016
comment
Хорошо, я понял. Но учитывая это, как уведомить пользователя о том, что что-то загружается? У меня есть ListView с бесконечной прокруткой (данные загружаются автоматически, когда пользователи прокручивают до последнего элемента), и когда нет индикатора выполнения - похоже, что список только что достиг своего конца. - person udenfox; 05.02.2016
comment
вы можете использовать прогресс + текст (загрузка...) или что-то еще. когда пользователь работает в режиме энергосбережения, он может видеть текст - person Dhaval Parmar; 05.02.2016
comment
Вы также можете проверить приложение Gmail для Android, что они сделали, когда включен режим экономии заряда батареи. - person Dhaval Parmar; 05.02.2016
comment
Я это уже делал, они ничего не сделали - вместо прогрессбара показывается пустой вид. Использование текста — отличный обходной путь. Кроме того, я думаю, что все еще могу использовать gif-анимацию для отображения бесконечного индикатора прогресса. - person udenfox; 05.02.2016

Как это предотвратить?

ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS позволяет вам попросить пользователя разрешить вашему приложению игнорировать оптимизация батареи, я не пробовал, но кажется законным.

person Joshua King    schedule 21.02.2016