이번에 처음으로 서비스라는것을 써봤는데 몇가지 궁금한 점이 생겨서
이렇게 질문을 드리게 되었습니다.
특히 2번과 3번같은건.. 꼭 필요한데 쉽지가 않더라구요
AIDL이란것을 써야하는것 같은데.. 예제나 그런것들이 잘 찾아볼수가 없어서
이렇게 질문을 드리게 되었습니다.
1. 서비스의 생명은 호출한 액티비티에서 다른 액티비티로 넘어가면 끝나나요?
2. 서비스에 있는 값을 액티비티에서 읽으려면 어떻게 하나요??
3. 액티비티에서 서비스에 있는 함수를 호출하려면 어떻게 하나요??
4. 로컬 서비스 라는 개념이있던데요.. 제가 하려고 하는게 하나의 앱에서만 서비스에 있는 값을 get함수를 통해
가져오려고 하거든요. 이런 방법에 대한 솔루션이 궁금합니다.
1. 해당 서비스에 대한 종료 명령을 내리지 않는한 서비스는 계속 살아있습니다.
2. 서비스의 멤버 변수 대한 직접 접근은 불가능하기때문에 get/set 함수를 구현하셔서 접근해야합니다.
3. 2번에 이어지는 내용이라 할수 있는데요. 서비스에 함수를 사용하시고자 한다면, AIDL 파일을 만드셔서 해당 함수에 대한 인터페이스를 구성하셔야 합니다. AIDL 파일은 그냥 새파일로 만드셔서 확장명을 "aidl"로 만드시면 되는거구요. 원하는 함수의 원형만 적어두시면 됩니다. 그리고 함수의 구현은 service 를 상속 받은 클래스에서 해주시면 되는거구요. service를 상속 받은 클래스에서 구현해야될 메서드들이 몇가지 있는데, onCreate() 는 서비스가 생성될테 할일들, onBind() 서비스 연결 요청이 왔을때 해야할일을 구현하시면됩니다.
이제 서비스를 실행하고 접근해야 하는데 이는, bindService(); 메서드를 통해 할수 있으며, 이 함수 사용시 서비스가 없다면 서비스를 생성하고 연결할것이며, 이미 생성되어 있다면 연결만 하게됩니다. 물론 서비스종료 stopService(), 연결해제 unBindService() 도 존재 하구요.
이제 함수의 접근은 ServiceConnection 클래스를 생성하셔서 이를 이용하시면 됩니다.
장황하게 글로만 설명이 되어있는데 예제도 첨부하였으면 설명과 같이 보시면 더욱 이해가 쉬울꺼라 생각됩니다.
(p.s. 사실 제가 만든 예제는 아니고 어디선가 받았는데.. 기억나질 않아서.. 혹시나 예제의 원작자분께서 보시면 양해 부탁드립니다. )




2번 3번의 경우는 ApiDemos에서 com.example.android.apis.app/RemoteServiceBinding.java 분석해 보시면 도움이 되실것 같습니다.