OnTask удалено в Android O - PullRequest
       27

OnTask удалено в Android O

0 голосов
/ 29 августа 2018

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

Теперь я готовлю приложение для Android O. Первая проблема, с которой я столкнулся, это Services, я переделываю их в JobServices.

Теперь я столкнулся с другой проблемой. Когда пользователь удаляет мое приложение из стека приложений, JobService.OnTaskRemoved не вызывается.

Раньше, когда я использовал Service, вызов Service.OnTaskRemoved работал нормально для меня.

Теперь я вижу только путь. Мне нужен мой старый Service для обработки Service.OnTaskRemoved и новый JobServices для выполнения задачи.

Я не прав? Может быть, кто-нибудь может дать мне хороший совет?

1 Ответ

0 голосов
/ 29 августа 2018

Вы реализуете неправильные концепции .., что создает проблему .., Чтобы заняться этим .. Вы снова реализуете неправильные вещи .. Пожалуйста, выгрузите все ...

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

Проблема;

  1. В Android O вообще не разрешено выполнение в фоновом режиме. Даже одна строка кода не гарантируется .. !!
  2. И вы хотите, чтобы он выполнял долгосрочную службу .. !!

Решение;

Одна и та же служба может быть запущена при первом открытии приложения ... При получении всех разрешений во время выполнения. As:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
     context.startForegroundService(new Intent(context, YourLongRunningService.class));
}
else
{
     context.startService(new Intent(context, YourLongRunningService.class));
}

OnStartCommand запускает долгосрочную задачу, которая анализирует и проверяет состояние устройства и приложения.

Проблема;

  1. OnStartCommand не предназначен для кодирования долгосрочных процедур / операторов кода.
  2. И вовсе не предназначен для кодирования ........

Решение;

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    Log.d("RUNNER : ", "\nPERFORMING....");
    return START_STICKY;
}

Над одной строкой говорится, что андроид должен оставаться в живых ВСЕ ВРЕМЯ, КОТОРОЕ РАЗРАБОТЧИК НЕ ОСТАНАВЛИВАЕТ ЕГО НА СВОЙ СОБСТВЕННЫЙ КОД ОТ ОСТАНОВКИ Даже удален из background или из recents; Он автоматически воссоздается Android OS

Тогда где я должен написать код .... ??

Подождите ... пока рано кодировать .... !!! терпение

начинает долгое выполнение задачи, которая анализирует и , проверяет состояние устройства и приложения

Ваш вопрос не ясен, и в моем мозгу есть ошибка gradle ... I can not resolve your symbols:

  1. анализ
  2. проверяет устройство
  3. статус приложения

Но я знаю, что эти твои трансляции определенно .. А тебе нужно реализовать широковещательные приемники ... чтобы получать это ... !!

Я буду внедрять широковещательные приемники ... Это слишком просто ...

Проблема;

Подождите ... Android O не позволяет вам реализовать множество широковещательных приемников из статических приемников, как мы ... И даже нам не разрешено вызывать эти приемники по определенным намеренным действиям из manifest.xml

Решение;

Внедрение приемников времени выполнения в созданную выше службу YourLongRunningService в onCreate, например:

IntentFilter myFilter = new IntentFilter();
myFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
this.registerReceiver(mCallBroadcastReceiver, CallFilter);

CONNECTIVITY_CHANGE является примером, и это будет ваше намерение / трансляция, которую вы хотите прослушать ... !!

Что такое mCallBroadcastReceiver и все ...

Это регистрация получателей во время выполнения ... и должна быть незарегистрированной с onDestroy, например:

@Override
public void onDestroy()
{
    this.unregisterReceiver(mCallBroadcastReceiver);
    super.onDestroy();
}

Нет .... Нет ... Нет .... Я не хочу отменять регистрацию ... Я хочу, чтобы это всегда работало ..

Наш сервис START_STICKY Даже если он разрушен; запускается автоматически и снова регистрируется mCallBroadcastReceiver в onCreate ..

Где тогда получатель .... ???

В этом случае mCallBroadcastReceiver - это получатель, определенный в области класса, где мы объявляем переменные и константы:

public class YourLongRunningService extends Service
{
NotificationManager mNotifyManager;
NotificationCompat.Builder mBuilder;
NotificationChannel notificationChannel;
String NOTIFICATION_CHANNEL_ID = "1";

private BroadcastReceiver mCallBroadcastReceiver = new BroadcastReceiver()
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
      // All your receiver code goes here...
    }
};

// your constructor

// your onStartcommand
// your ondestroy
}

Что здесь делает менеджер уведомлений .... ???

В и выше O вы не можете запускать службу переднего плана без надлежащего Ongoing уведомления о задаче ... Он будет идти в вашем onCreate, который вызовет Startforeground с уведомлением, чтобы запустить эту службу как службу переднего плана

Что ниже андроида O ...?

Он работает и под Android O тоже ... Просто позвоните с нормальной службы запуска его код, который он дал при самом начале ... !!

Куда уходит мой долго работающий код .... ???

От получателя вы получаете широковещательную рассылку и запускаете intentservice или job или класс тревоги или что хотите ...

Я сделаю простой класс, который принимает в конструктор context и определяет открытый метод с именем LongRunningCode, который может состоять из одной строки кода ....При получении широковещательной передачи в приемнике я создам объект этого класса, передав context получателя, и просто вызову метод LongRunningCode с этим object

Надеюсь, это поможет

...