Как да се справим с фоновите услуги в ANDROID O?

Нищо не прави андроид програмиста по-луд от нова версия на Android.

Google току-що разкри DP1 на следващата итерация на android: Android O. Има много нови вълнуващи функции и под подобрения на производителността на капака в най-новата версия на android.

Докато другите говорят за това, как ще се казва Android O, нека анализираме този аромат на android от гледна точка на програмиста. За андроид разработчиците има четири революционни промени:

  • Основни ограничения за изпълнение
  • Ограничение за актуализиране на местоположението
  • Премахване на неявни излъчвания
  • Канали за уведомяване

Тук, в тази статия, нека поговорим за ограничаване на изпълнението на фона. Основните ограничения за изпълнение се прилагат основно за два основни компонента:

  • Обслужване
  • Wakelocks

Нека да поговорим за ограниченията, прилагани за услугите в тази статия.

Каква е услугата в android?

Нека първо да опресним каква е услугата в Android? Съгласно документацията за android:

Услугата е компонент на приложението, който може да извършва продължителни операции във фонов режим и не предоставя потребителски интерфейс.

Така че по същество Сервизът е едно и също нещо като дейността, но в него няма компонента на потребителския интерфейс. Така че не е нужно да изпълнява гладка анимация при 60 fps. Ето защо той може да изпълнява всяка задача за по-дълъг период от дейността.

Има три вида услуги:

  • Started Service - Услуга се стартира, когато компонент на приложение (като активност) извика startService ().
  • Обвързана услуга - Услуга е обвързана, когато компонент на приложение се свързва към нея чрез повикване bindService ().
  • Планирана услуга - Услуга е планирана, когато API, като JobScheduler.

Приложения за фон на преден план:

За да научим промените в изпълнението на фона, първо трябва да знаем разликата между приложението за фон и преден план.

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

  1. В момента приложението ви има видима активност.
  2. В приложението ви работи услуга на преден план.
  3. Вашето приложение е свързано с друго приложение на преден план чрез обвързване на услугата или чрез консумиране на техните доставчици на съдържание.

Ако някой от горните сценарии не е вярно в текущия случай, вашето приложение се счита за заден план.

Защо трябва да ограничаваме използването на фонови услуги?

Всеки път, когато вашите приложения работят във фонов режим, използвайки услуги, приложението ви изразходва два ценни ресурса: 1) Памет и 2) Батерия.

Тези две са ограничени ресурси на мобилните устройства и повечето от устройствата с нисък и среден обхват нямат много памет или батерия вътре.

Да предположим, че ако приложението ви върши някои много интензивни задачи на заден план и използва по-голямото количество RAM за изпълнение на тази задача, тогава това ще създаде много нежелана потребителска работа, особено ако потребителят използва друго приложение, изискващо големи ресурси, например игра на игра или гледане на видео на преден план.

Според документацията за стартираната услуга най-добрата практика е,

Когато операцията приключи, услугата трябва да се спре.

Но много приложения имат дългогодишни фонови услуги, които по принцип работят за безкрайното време или да поддържат сокетната връзка със сървъра или да наблюдават някои задачи или активност на потребителя. Тези услуги създават изтощение на батерията и също така постоянно консумират памет.

От последните няколко версии на android (Започвайки от Marshmallow), Google се опитва много да увеличи живота на батерията и да намали консумацията на памет, използвана от приложенията, като въведе режима на дозата и готовността на приложението, като забави изпълнението на фона с известно време ако телефонът е бездействащ.

Но през повечето време въпреки познаването на недостатъците на дългогодишните разработчици на услуги все още ги използват. (Най-вече защото е лесен за изпълнение и поддръжка, а не за използване на други решения.)

Какви са ограниченията за услуги, започвайки от Android O?

Започвайки от Android O, ако приложението ви е на заден план (проверете над три условия), на приложението ви е разрешено да създава и стартира фонови услуги за няколко минути.

След няколко минути приложението ви ще влезе в режим на празен ход. Когато приложението ви влезе в режим на празен ход, системата ще спре всички фонови услуги, точно както вашата услуга извиква Service.stopSelf ().

И тук идва забавната част ...

Както обсъдих по-горе, проблемът с изтощаването на батерията и консумацията на памет се причиняват главно от стартирани услуги. За да елиминира това, Android O напълно предотвратява използването на метод startService () за стартиране на услугата. Ако извикате startService () на Android O, в крайна сметка ще получите IllegalArgumentException .

Има някои изключения в тези сценарии, когато приложението ви е включено в бели списъци временно за определен период от време. През този период приложението ви може свободно да създава фонови услуги. Приложението ще бъде поставено във временна бяла листа при следните ситуации:

  • Когато съобщението с висок приоритет е получено
  • Получаване на излъчване
  • Изпълнение на изчакващ намерение от известие.

Как можете да изпълнявате фонови задачи?

Ако изграждате много голямо приложение за Android, може да има някои истински сценарии, при които трябва да изпълнявате някои задачи във фонов режим. Тъй като стартирането на услуга с помощта на командата startService () не е опция, трябва да намерим други начини за изпълнение на задачите във фонов режим.

Планиране на задачите ви чрез API на Job Scheduler:

  • JobScheduler api, въведена в API21 за изпълнение на фонови задачи.
  • Този API ви позволява да стартирате планирана услуга и андроид системата ще пакетира всички услуги от различни приложения и ще ги стартира заедно в определен определен период от време. Причината за това е да намалите времето, в което процесорът и радиото на телефона ви се събуждат, като групирате задачите заедно. Това ще консумира по-малко батерия и ще поддържа здравето на системата.
  • Какво става, ако приложението ви има minSdkVersion <21? В тази ситуация официалният начин да планирате работата е да използвате Firebase Job Dispatcher. Firebase Job Dispatcher се поддържа до API9 до горе.

Използвайте услугата за преден план

Ако искате някои задачи да се изпълняват на заден план, помислете дали да използвате услугите за преден план. Нито едно от горните ограничения за изпълнение на фона не се прилага за услугите на преден план.

Това също ще информира потребителя, че приложението ви изпълнява някои основни задачи, като показва текущото известие. Това ще увеличи прозрачността с вашия потребител.

Преди Android O, ако искате да създадете услуга на преден план, обикновено стартирате фонова услуга, като се обадите на startService (). След това, след като можете да популяризирате услугата си на преден план чрез задаване на текущо известие, използвайки метода startForeground (). Но като започнете от Android O, вече не можете да използвате startService (). За да създадете услуга за преден план, трябва да използвате NotificationManager.startServiceInForeground (). Този метод е еквивалентен на създаването на фонова услуга и промотирането й до комбинираната услуга на преден план.

Заключение:

Тези ограничения, приложени към фоновата услуга, определено ще осигурят удължен живот на батерията и също така по-ниска употреба на RAM памет. В крайна сметка това ще направи вашите приложения гладки и вашите потребители щастливи.

Трябва ли сега да направите промени в кода на приложението си?

Android O все още е в DP1. Има още 3 визуализации за разработчици, които трябва да бъдат пуснати преди излизането на окончателната версия на Android O. Възможно е да има някои промени в API в предстоящите версии. Затова сега е време да помислите за ефектите от тези промени в приложението си и да помислите за алтернативното решение за тях. След като визуализацията на програмист 3–4 се освободи, приложете тези промени към приложенията си и направете приложението ви Android O съвместимо.

https://paypal.me/kpatel2106?locale.x=en_GB

~ Ако статията ви е харесала, щракнете върху по-долу, така че повече хора да я видят! Също така, можете да ме следите в Medium или в My Blog, така че да получавате актуализации относно моите бъдещи статии !! ~