Рубрики
Без рубрики

Услуги в Android

Это контраст между связанными службами и запущенными службами в разработке Android.

Автор оригинала: MOHIT KUMAR.

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

  1. Начато Обслуживание
  2. Связанные Услуги
Снимок экрана 2018-03-29 в 10.47.49 вечера.png

НАЧАТО ОБСЛУЖИВАНИЕ

Запущенные сервисы-это самые основные виды услуг. Служба вызывается как запущенная служба только тогда, когда действие вызывает службу с помощью функции 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”