Вы реализуете неправильные концепции .., что создает проблему .., Чтобы заняться этим .. Вы снова реализуете неправильные вещи .. Пожалуйста, выгрузите все ...
В моем приложении для Android есть служба, которая запускается, когда приложение переходит в фоновый режим.
Проблема;
- В Android O вообще не разрешено выполнение в фоновом режиме. Даже одна строка кода не гарантируется .. !!
- И вы хотите, чтобы он выполнял долгосрочную службу .. !!
Решение;
Одна и та же служба может быть запущена при первом открытии приложения ... При получении всех разрешений во время выполнения. 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
запускает долгосрочную задачу, которая анализирует и проверяет состояние устройства и приложения.
Проблема;
- OnStartCommand не предназначен для кодирования долгосрочных процедур / операторов кода.
- И вовсе не предназначен для кодирования ........
Решение;
@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
:
- анализ
- проверяет устройство
- статус приложения
Но я знаю, что эти твои трансляции определенно .. А тебе нужно реализовать широковещательные приемники ... чтобы получать это ... !!
Я буду внедрять широковещательные приемники ... Это слишком просто ...
Проблема;
Подождите ... 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
Надеюсь, это поможет