android binder 예제

이 장의 나머지 부분에서 만든 예제 응용 프로그램은 단일 활동과 바인딩된 서비스로 구성됩니다. 바인딩된 서비스의 목적은 시스템에서 현재 시간을 얻고 해당 정보를 사용자에게 표시할 활동으로 반환하는 것입니다. 바인딩된 서비스는 활동과 동일한 응용 프로그램에 로컬 및 비공개로 유지됩니다. 위의 예제에서는 바인딩된 서비스에 대 한 Java 개체를 클라이언트 구성 요소에 노출 하는 getService() 라는 메서드를 노출 하기만 하면 됩니다. 이 IBinder를 참조하여 클라이언트는 바인딩된 서비스 개체에서 공용 메서드를 직접 호출할 수 있습니다. 이러한 메서드는 이러한 메서드를 호출 하는 클라이언트 구성 요소의 스레드에서 실행 됩니다. 활동 또는 조각의 경우 이러한 메서드는 기본 스레드에서 실행되므로 바인딩된 서비스에서 차단 메서드를 호출하고 앱에서 ANR을 발생시키는 데 주의해야 합니다. 원격 쪽에서는 바인더로 호출하여 IPC를 수행합니다. 다음은 Messenger 인터페이스를 사용하는 간단한 예제 서비스입니다: AIDL을 직접 사용하려면 프로그래밍 인터페이스를 정의하는 .aidl 파일을 만들어야 합니다. Android SDK 도구는 이 파일을 사용하여 인터페이스를 구현하고 IPC를 처리하는 추상 클래스를 생성하여 서비스 내에서 확장할 수 있습니다. 이렇게 하면 확장 또는 바인더 클래스에서 확장하는 확장을 사용하여 바인딩된 서비스를 만들 수 있습니다. 서비스에서 통신을 시작하려면 Messenger를 사용하여 서비스에 대한 인터페이스를 제공해야 할 수 있습니다.

작업 예제를 보려면 이러한 샘플 MessengerService.java (서비스) 및 MessengerServiceActivities.java (클라이언트)를 참조하십시오. 다음은 서비스 연결 구현의 예입니다. 바인더 사용을 보여주는이 간단한 예제주셔서 감사합니다. 우선, 우리는 공용 클래스가 될 내 서비스 클래스 내에서 클래스를 만들고 LocalBinder로 이름을 지정합니다. 그리고이 클래스는 바인더 클래스에서 확장됩니다. 코드 변경이 완료되면 응용 프로그램의 테스트 실행을 수행합니다. 일단 표시되면 버튼을 터치하고 텍스트 보기가 변경되어 현재 날짜와 시간을 표시합니다. 예제가 성공적으로 시작되고 서비스에 바인딩된 다음 해당 서비스의 메서드를 호출하여 작업이 수행되고 결과가 활동으로 반환됩니다. 시작된 서비스는 의도로 시작됩니다. 그리고 서비스를 시작하는 구성 요소는 실제로 연결을 유지하지 않으며 시작 된 서비스에 무언가를 통신해야하는 경우 다시 시작하고 다른 의도를 전달할 수 있습니다.