Виджет приложения не обновляется в режиме энергосбережения

У меня есть виджет с доступом к сети.
Обновление виджетов в режиме энергосбережения приводит к исключению тайм-аута.
Оказывается, обработка исключения оптимизации батареи решит эту проблему.< br /> Но некоторые приложения видели доступ к сети в виджетах без каких-либо исключений оптимизации батареи.

Как они возможны?

Вот мой подкласс AppWidgetProvider.

public class WidgetProvider4x2 extends AppWidgetProvider {

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        for (int appWidgetId : appWidgetIds) {
            requestApi();
        }
    }

    private void requrestApi() {
        // timeout occurs
    }
}

person thesquare12    schedule 08.09.2020    source источник
comment
Открывает ли requestApi() новый поток?   -  person Gil Becker    schedule 08.09.2020
comment
@GilBecker Это имеет эффект? В моем случае используется AsyncTask.   -  person thesquare12    schedule 08.09.2020
comment
Нет, я так не думаю. Мне удалось воспроизвести вашу проблему, но не решить ее. Не уверен, почему экономия заряда батареи вызывает эти исключения тайм-аута Volley. Попробуйте сделать что-то подобное: stackoverflow.com/questions/56988709/ Возможно, изменение политики повторных попыток может помочь...   -  person Gil Becker    schedule 09.09.2020


Ответы (1)


Это потому, что при включенном режиме энергосбережения значение RESTRICT_BACKGROUND_STATUS_ENABLED равно true. Когда RESTRICT_BACKGROUND_STATUS_ENABLED имеет значение true, мы не можем загружать/извлекать данные из сети вне уровня представления, например. активность/фрагмент. Чтобы решить эту проблему, вы можете запросить разрешение на ограничение данных, используя намерение.

Intent intent = new Intent(Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS, Uri.parse("package:" + getPackageName()));
            startActivity(intent);
person ilham suaib    schedule 28.12.2020