62
задан 8 February 2019 в 16:58

4 ответа

От Google существует обходное решение:

проблема была решена в будущем выпуске Android.

существует обходное решение для предотвращения сбоя приложения. Приложения могут получить состояние процесса в Activity.onResume () путем вызова ActivityManager.getRunningAppProcesses () и избежать стартового Сервиса, если уровень важности ниже, чем ActivityManager. RunningAppProcessInfo. IMPORTANCE_FOREGROUND. Если бы устройство hasn’t полностью не спящий, операции были бы приостановлены сразу и в конечном счете возобновлены снова после полностью не спящего.

, Таким образом, я думаю, что это хотело бы это:

// hack for https://issuetracker.google.com/issues/113122354
    List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses();
    if (runningAppProcesses != null) {
        int importance = runningAppProcesses.get(0).importance;
        // higher importance has lower number (?)
        if (importance <= ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND)
            URLPlayerService.startActionBroadcastServiceData(PlayerActivity.this);
    }

я использовал обработчик в качестве обходного решения, и он работает довольно хороший, но не 100%:

// hack for https://issuetracker.google.com/issues/113122354
   handler.postDelayed(() -> URLPlayerService.startService(PlayerActivity.this),200);
7
ответ дан 31 October 2019 в 14:38

наша команда, сталкивающаяся с той же проблемой. Мои календарные шоу 5 апреля 2019, но проблема все еще воспроизводят на моем Samsung Galaxy S9 +, андроид 9.0 (Один UI)

, Мы запускаем сервис в onResume и развязываем onPause.

, Как воспроизвести

Просто, блокируют Ваше устройство, когда действие с этой логикой находится на экране, и не касайтесь 10-15 минут. После разблокировали экран, приложение откажет.

, Как зафиксировать

, Мы нашли решение, это на самом деле работает. Начиная с андроида 8 +, запустите свой сервис в android.os. Handler.post (...)

Пример (Kotlin):

override fun onResume() {
    super.onResume()
    Handler().post {
        val serviceIntent = Intent(activity, SomeService::class.java)
        activity?.startService(serviceIntent)
        activity?.bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE)
    }
}

Удачи!

2
ответ дан 31 October 2019 в 14:38

Это было отмечено, как 'зафиксировано' в Системе отслеживания ошибок Android:

, По-видимому, фиксация будет выпущена в одном из выпусков Android Q.

По словам Сотрудника Google, который закрыл проблему,

, существует обходное решение для предотвращения сбоя приложения. Приложения могут получить состояние процесса в Activity.onResume() путем вызова ActivityManager.getRunningAppProcesses() и избежать стартового Сервиса, если уровень важности ниже, чем ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND. Если бы устройство hasn’t полностью не спящий, операции были бы приостановлены сразу и в конечном счете возобновлены снова после полностью не спящего.

1
ответ дан 31 October 2019 в 14:38

Они зафиксировали катастрофический отказ (в некотором будущем выпуске, не уверенном, который точно), и обеспечил обходное решение на данный момент: https://issuetracker.google.com/issues/110237673#comment9

0
ответ дан 31 October 2019 в 14:38

Другие вопросы по тегам:

Похожие вопросы: