본문 바로가기
개발/안드로이드

안드로이드 ContentObserver

by darksilber 2017. 1. 31.
반응형

출처 - http://aroundck.tistory.com/129

 

안녕하세요 돼지왕왕돼지입니다.
오늘은 ContentObserver 라는 녀석이 뭐 하는 녀석인지 함께 알아봅시다.

ContentObserver 넌 누구냐?

  

ContentObserver 는 해당 URI 를 Observe 하다가, 변경이 생기면 알려주는 놈입니다.
 


Observer 사용 방법을 알려주세요.


Observer 를 등록하는 방법은 다음과 같습니다.

ContentResolver cr = getContentResolver();
ContentObserver contentObserver = new ContentObserver( new Handler() ){
  public void onChange( boolean selfChange ){
     super.onChange( selfChange );
     // do sth..
  }
};
cr.registerContentObserver( URI, true, contentObserver );

 

 
두번째 라인의 handler 는 URI 변경시에 호출이 됩니다. 즉 handler 를 넣어주면 그 handler 안에서 onChange 가 호출되는 것입니다.
 

 
Developer 를 통해 registerContentObserver() 의 API Doc을 살펴봤습니다.

public final void registerContentObserver (Uri uri, boolean notifyForDescendents, ContentObserver observer )

 - URI 는 observe 할 URI
- boolean 값은 해당 URI 만 할 것인지, URI 자손의 변화까지 감지할것인가.
- 세번째는 변경되었을 때 호출될 Observer.
 

 
Register 하는 곳이 있으면 unregister 하는 것을 잊어서는 안되죠?

public final void unregisterContentObserver ( ContentObserver observer )

 


onDestroy() 나 onPause() 등에 꼭 등록해놓읍시다.




Observer 만 등록하면 만사 오케이인가요?

 
아닙니다. Content Provider에서 DB가 수정되는 부분에 아래와 같은 코드가 추가되어야 합니다.
 

getContext().getContentResolver().notifyChange( uri, null );

 
- uri 는 ContentProvider 의 URI.
 

개인적으로 onChanged() 가 불릴 때, 어떤 내용이 바뀌었는지 Message 도 함께 보낼 수 있으면 참 좋을텐데 말이죠...
자, 유용하게 사용하시길..
반응형

댓글