[Android Service에서 Activity의 UI 업데이트 하기]


Service가 Manifest 파일에 등록이 되어 있고, UI update를 해야할 Activity는 다른 java파일일때,

Service로 응답이 예를 들어, onReceive() 같은 메서드로 오는데, Activity가 다른 java파일이라 바로 UI 업데이트를 할 수가 없다. (물론, Notification, 토스트 띄우기, Activity전환, 위젯 바꾸기 등 같은 것은 바로 할수 있다.)


더좋은 방법을 찾고 싶었으나, 아래 방법이 최선인듯 하다.


1. 서비스를 실행시킨다.


... (중략) ...


2. 서비스로 응답이 온다.


3. 응답시에, intent action을 정하여, sendBroadcast(intent) 한다.

  1) broadcastReceiver 이용

    (1) 원하는 액티비티에서 BroadcastReceiver를 dynamic하게 정의한다.

         그리고, onCreate()시에 registReceiver() 해주고, onDestroy()시에 unregistReceiver() 한다.


    (2) 액티비티에서 BroadcastReceiver의 onReceive()에 3에서 정의한 intent action에 대해 분기처리 후,   그에 맞는 UI 업데이트를 하면 된다.


  2) listener 이용

     (1) interface 를 하나 만들고 추상 메서드를 하나 만든다.

     (2) 서비스안에  void setListener(InfListener listener) 와 같이 만들고, 멤버변수에 mListener에 세팅하게 해준다. 응답이 왔을시, mListener.onResponse(msg) 이런식으로 응답하게 만들어준다. 단, 이렇게 되면, UI Thread에 동기화가 안되기 때문에 리스너를 세팅해준곳에서 UI Thread와 동기화하게 onResponse(msg) 를 정의한곳에서 handler에게 넘겨주던가, runOnUIThread() 안에 넣어주던지 해야한다.


'MobileProgramming > Android' 카테고리의 다른 글

Android 참고할만한 동영상  (0) 2020.06.14
Android 용어 및 기타  (1) 2015.10.15
Android 코드 작성 규칙  (0) 2015.06.24
Fragment  (0) 2015.06.24
Layout  (0) 2015.06.24

+ Recent posts