현재 신청서에 서비스와 활동이 있습니다.Android가 활동과 통신하기 위해 서비스를 받고 있습니까?
저는 현재 AIDL을 서비스로 사용하지 않고 활동에 서비스를 바인딩하고 활동은 동일한 애플리케이션에 있습니다.
이렇게하면 필요한 경우 내 Activity 내에서 서비스의 메서드를 호출 할 수 있지만 원하는 경우 내 Service 내에서 Activity의 메서드를 호출 할 수는 없습니다.
누구든지이 문제를 해결하는 가장 좋은 방법에 대해 의견을 말할 수 있습니까?
인 텐트를 사용할 수는 있지만 대체 옵션이 있습니까?
서비스와 활동 사이의 긴밀한 통신을 원한다. 이벤트가 발생할 때 내 서비스에서 Activity 메서드를 호출 할 수 있기를 원한다.
훌륭한 조언은 ognian에게 감사드립니다.
편집 2 :
는 지금 그러나 나는이 문제에 걸쳐 온, 그것이 내가 원하는 방식으로 작동합니다.
내 서비스가 상태 업데이트를 가져오고 내 활동이 서비스에서 보낸 업데이트에 반응해야합니다.
문제는 내 활동을 시작할 때 onBind가 호출되기 전에 전화 걸기 상태와 연결 상태를 얻고 iCallDialogActivity 인스턴스를 얻는 것입니다.
logcat의 다음 출력 결과는 더 명확 해집니다.
06-28 10:56:48.702: DEBUG/TestPhone(3498): Status: EStatusDialling
06-28 10:56:48.751: DEBUG/TestPhone(3498): Status: EStatusConnected
06-28 10:56:49.122: DEBUG/TestPhone(3498): Status: onBind Called <-------------
06-28 10:56:49.141: DEBUG/TestPhone(3498): Status: iCallDialogActivity instance <-------------
06-28 10:56:51.641: DEBUG/TestPhone(3498): Status: EStatusDisconnecting
06-28 10:56:51.651: DEBUG/TestPhone(3498): Status: EStatusIdle
전화 걸기 및 연결 상태 알림을받을 때 내 iCallDialogActivity를 사용할 수 있어야합니다.
하지만 내 액티비티가 시작될 때 생성되지 않기 때문에 NullPointer 예외가 발생합니다. 액티비티 onCreate()에서 바인딩이 가장 먼저 수행됩니다.
바로 바인딩 할 수있는 방법이 있습니까?
서비스 코드에서 'public void setCallback (ICallDialogActivity callDialogActivity)'메서드는 실제로 콜백에 대한 서비스 글로벌 참조를 설정해야합니다. 그런 다음 서비스에서 필요할 때 사용할 수 있습니다. 또한 removeCallback() 메서드를 추가해야합니다.이 메서드는 Activity onDestroy()에서 호출합니다. 그렇지 않으면 Service가 Dead Activity를 호출 할 수 있습니다.서비스와 활동에 완전히 다른 라이프 사이클이 있기 때문에 이것을 신중하게 설계해야합니다. – ognian
감사합니다. ognian, 구현했습니다. 이제해야 할 일에 대해 파악하고 있습니다. 그러나 다른 문제를 발견하고 그에 따라 게시물을 편집했습니다. 내 새로운 문제에 대한 통찰력을 가지고 있습니까? –