마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 service클래스에서 UI 변경

0 추천

 

핸들러를 Looper.getMainLooper()로 생성하여 메인스레드에서 동작하도록 설정하였습니다.   1)소스코드

서비스가 시작할때 startScanning() 메소드가 실행되고[3)소스코드]  

스캔이 됬을때는 콜벡 메소드가 호출되어 어떤 특정 값을 얻을 수 있습니다. 2) 소스코드

 

그 이후 UI를 변경하려고 하는데 어떤 방법이 있을까요?

sendMessage()로 변경값을 해줘야되나요??

 

어떻게 해야될지 감이 잡히질 않습니다.

 

좋은 답변 부탁드립니다.

 

-Service 클래스의 소스코드

1)소스코드

2)소스코드

onPeripheralScan() : 콜벡메소드

3)소스코드

벅수 (870 포인트) 님이 2015년 3월 25일 질문
벅수님이 2015년 3월 26일 수정

2개의 답변

+1 추천
 
채택된 답변
BT장치나 비콘 같은 걸 검색하는 서비스인가 보네요.

"검색된 결과를 리스트뷰 등에 보여주려고 하는데, 콜백 메소드인 onPeripheralScan에서 UI를 변경하려고 하니까 안되더라"

이게 질문인 거 맞나요?

말씀하신 것처럼 핸들러를 이용해서 sendMessage하는 게 무난한 방법입니다.

먼저 답변주신 분의 답변처럼 브로드캐스트(이런 경우라면 LocalBroadcastManager를 이용하시면 될 것 같고) 이용하셔도 되구요

리스너 구현은 결국 메인 쓰레드의 실행이 아닐테니, 일단 별로인 것 같습니다.
cc1232 (35,280 포인트) 님이 2015년 3월 26일 답변
벅수님이 2015년 3월 27일 채택됨
핸들러를 이용한 ResultReceiver라는 게 있으니 이걸 이용하는 게 가장 정석일 듯 합니다. 구글 디벨로퍼 사이트의 서비스쪽 설명도 이걸로 되어있네요
답변 감사합니다.
네.맞습니다.
onPeripheralScan 안에서 ui를 변경하려고 하는 방법입니다.
물론 액티비티에서 하던 UI를 변경하려는 코드를 사용하면 안되겠고
다른 방법을 사용해야할것 같은데 어떻게 해야되는지 감이 안잡혀서 질문을 하였습니다. ㅎㅎ
감사합니다. 한번 찾아보겠습니다.
+1 추천
그냥 한 두 줄 정도로 간단하게 설명할 수 있는 부분은 아니라서 키워드만 전달드립니다.

 

서비스에서 다른 컴포넌트로 값을 전달하는 방법은 당장 생각나는것만 해도 3가지네요

(아마 제가 언급하는 것 외에도 더 있을 겁니다.)

1. LocalBinder 구현

2. BroadcastReceiver

3. Listener(또는 Callback) interface 구현

세 가지 방법 모두 서비스에서 Activity단으로 데이터를 전달해서 UI를 변경하는데 사용할 수 있구요

위 키워드로 구글링하셔서 입맛에 맞는 걸로 구현하시면 됩니다. (세가지 방법으로 다 할 줄 아시면 좋겠지만)
Gradler (109,780 포인트) 님이 2015년 3월 26일 답변
네 감사합니다. ㅠ.ㅠ
구글링으로 검색해보고 괜찮은 방법으로 해보겠습니다.
...