Автор оригинала: MOHIT KUMAR.
Система Android имеет два типа сервисов: запущенный сервис и связанный сервис, оба имеют аналогичный механизм. В первые дни я был так чертовски сбит с толку и испугался, что такие сложности действительно существуют в сообществе Android. Со временем я победил свой страх и потратил время на чтение многих блогов, и медленно, но верно я заполучил сервисы в Android. В основном существует два вида услуг:
- Начато Обслуживание
- Связанные Услуги
НАЧАТО ОБСЛУЖИВАНИЕ
Запущенные сервисы-это самые основные виды услуг. Служба вызывается как запущенная служба только тогда, когда действие вызывает службу с помощью функции startService() . Как только эта служба будет вызвана или открыта, она будет работать бесконечно в фоновом режиме, даже если компонент, который ее запустил, будет уничтожен. В основном существуют различные функции жизненного цикла службы Android: onStartCommand() – Этот метод будет выполнен, если служба является запущенной службой. on Bind() – Этот метод будет выполнен, если метод является связанной службой. onCreate() – Первый метод, который вызывается всякий раз, когда вызывается служба. onDestroy() – Этот метод будет вызван системой Android перед уничтожением службы. Мы переопределяем метод onBind() во всех службах, но в случае запущенных служб этот метод вернет значение null. Поэтому разрабатываем демонстрационное приложение для демонстрации запущенных сервисов. Создайте приложение, состоящее из двух кнопок, помеченных как кнопка “Пуск” и кнопка “Стоп”.
public class StartedService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(this,"Service Started!!",Toast.LENGTH_LONG).show(); return START_STICKY; } @Override public void onCreate() { super.onCreate(); } @Override public void onDestroy() { Toast.makeText(this,"Service Stopped!!",Toast.LENGTH_LONG).show(); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } }
Как это вызывается из действия, показано ниже. Здесь кнопка “Пуск” вызывает функцию startService (), а кнопка “Стоп” вызывает функцию stopService().
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void startService(View view) { Intent intent = new Intent(this,StartedService.class); startService(intent); } public void stopService(View view) { Intent intent = new Intent(this,StartedService.class); stopService(intent); } }
Из вышеизложенного ясно, что служба вызывается с помощью startService () , следовательно, это запущенная служба.
СВЯЗАННАЯ СЛУЖБА
Связанные сервисы-это вторая классификация сервисов в системе Android. Эти службы имитируют взаимодействие Клиент-сервер, которое происходит, когда служба действует как сервер, а действие или компонент Android, вызывающий службу, действует как клиент. Мы должны создать пользовательский интерфейс, чтобы служба могла взаимодействовать с активностью или компонентом Android. Интерфейс создается в классе обслуживания, который расширяет класс связующего, поскольку в этом случае переопределяется только метод onbind (). Вот как выглядит связанный класс службы: класс взаимодействия используется в качестве интерфейса, чтобы служба могла взаимодействовать с действием и другими компонентами:
public class BoundService extends Service { private final IBinder binder = new InteractionService(); @Nullable @Override public IBinder onBind(Intent intent) { return binder; } public class InteractionService extends Binder { BoundService getService() { return BoundService.this; } } public String getPrimaryMessage() { return "This is the primary message...!!"; } public String getSecondaryMessage() { return "This is the secondary message...!!"; } }
Теперь посмотрим, как Действие или компоненты взаимодействуют с этой службой. Нам нужно создать подключение к сервису. Пример этого действия показан ниже:
public class MainActivity extends AppCompatActivity { BoundService boundService; boolean isBind = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = new Intent(this,BoundService.class); bindService(intent,serviceConnection,BIND_AUTO_CREATE); } public void getFirstServiceMessage(View view) { String message = boundService.getPrimaryMessage(); } public void getSecondServiceMessage(View view) { String message = boundService.getPrimaryMessage(); } private ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { BoundService.InteractionService interactionService = (BoundService.InteractionService) service; interactionService.getService(); isBind = true; } @Override public void onServiceDisconnected(ComponentName name) { isBind = false; } }; @Override protected void onStop() { super.onStop(); if(isBind) { unbindService(serviceConnection); isBind = false; } } }
Вот в чем разница между Привязанной службой и Запущенной Службой.
Оригинал: “https://www.codementor.io/@kumarmohit983/services-in-android-i0jb5vnnl”