안드로이드 바인더 서비스 예제

Postato il 2 Ago 2019 in Senza categoria

서비스가 다시 시작되지 않습니다. 어쨌든 주기적으로 트리거되는 서비스에 사용됩니다. 서비스는 서비스 종료 이후 런타임에 보류 중인 startService() 호출이 있는 경우에만 다시 시작됩니다. 서비스를 시작할 때 onCreate() 및 onStartCommand()가 서비스 클래스에서 호출되며 stopService() 에서 다른 이벤트가 발생할 때 서비스를 중지할 수 있습니다. 구성 요소(클라이언트)는 bindService()를 호출하여 서비스에 바인딩할 수 있습니다. 그런 다음 Android 시스템은 서비스와 상호 작용하기 위해 IBinder를 반환하는 서비스의 onBind() 메서드를 호출합니다. 시작된 서비스에 바인딩을 추가할 때 서비스 수명 주기에 대한 자세한 내용은 바인딩된 서비스의 수명 주기 관리를 참조하십시오. 우선, 우리는 공용 클래스가 될 내 서비스 클래스 내에서 클래스를 만들고 LocalBinder로 이름을 지정합니다. 그리고이 클래스는 바인더 클래스에서 확장됩니다. Android O에서 시작된 서비스와 관련하여 상황이 변경되었습니다. 영구 알림 없이는 더 이상 백그라운드에서 실행할 수 없습니다.

그리고 O에서 배경을 시작 서비스를 시작하는 방법은 startForegroundService (의도)입니다. 바인딩된 서비스는 Android Service 클래스의 하위 클래스로 만들어지며 최소한 onBind() 메서드를 구현해야 합니다. 클라이언트 구성 요소는 bindService() 메서드에 대한 호출을 통해 서비스에 바인딩합니다. 바인딩된 서비스에 대 한 첫 번째 바인딩 요청 해당 서비스의 onBind() 메서드에 대 한 호출 (후속 바인딩 요청 onBind() 호출을 트리거 하지 않습니다. 서비스에 바인딩하려는 클라이언트는 클라이언트-서버 연결이 설정되거나 연결이 끊어지면 호출되는 onServiceConnectioned() 및 onServiceDisconnected() 메서드s를 포함하는 ServiceConnection 하위 클래스도 구현해야 합니다. 각각. onServiceConnected() 메서드의 경우 클라이언트가 서비스와 상호 작용하는 데 필요한 정보를 포함하는 IBinder 개체를 전달합니다. 지금 우리의 응용 프로그램은 지금 실행하고 우리가이 임의의 숫자 버튼을 얻을 클릭 하면 그것은 나에게 당신이 안드로이드에서 바인딩 된 서비스를 만들 수있는이 방법으로 142.So 난수를 제공합니다. 이전에 설명한 대로 로컬 바인딩된 서비스는 적절하게 구성된 바인더 개체를 클라이언트에 전달하여 바인딩된 클라이언트와 통신할 수 있습니다. 이는 바인딩된 서비스 클래스 내에서 Binder 하위 클래스를 만들고 클라이언트에서 호출할 수 있는 하나 이상의 새 메서드를 추가하여 확장하여 달성됩니다.

대부분의 경우 바인딩된 서비스 인스턴스에 대한 참조를 반환하는 메서드를 구현하는 작업이 포함됩니다. 이 인스턴스를 참조하면 클라이언트는 바인딩된 서비스 내에서 직접 데이터 및 호출 메서드에 액세스할 수 있습니다. 스레드 및 비동기 작업 서비스를 사용한 Android 백그라운드 처리는 반복적이고 잠재적으로 장기적인 실행 작업( 예: 인터넷 다운로드, 새 데이터 확인, 데이터 처리 확인, 콘텐츠 공급자 업데이트 등에 사용)에 사용됩니다. 많은 안드로이드 O의 배경 서비스와 함께 변경되었습니다. 주요 차이점 중 하나는 영구 알림이 없는 시작 된 서비스는 활동이 사라질 때 백그라운드에서 실행될 수 없습니다. 즉, 시작 된 서비스를 연결 하는 영구 알림이 있어야 합니다. 또한 다른 방법으로 시작 된 서비스를 시작 -startForegroundService(). 그리고 당신은 포그라운드에이 시작 된 서비스를 이동 하 고 그것에 영구 알림을 연결 하기 위해 5 초, 그렇지 않으면 ANR을 얻을 것 이다. 이 모든 예제와 함께 아래에 설명됩니다. 4 단계) 이제 우리가 원하는 것을 만든 `LocalBinder`클래스 내에서 MyService를 반환하는 메서드를 만들고 메서드 이름은 GetService입니다. 그리고 이것이 할 일은 MyService.this의 인스턴스를 반환하는 것입니다.