본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Android/안드로이드] Loader ( HoneyComb 부터 도입된 api. )

by 돼지왕 왕돼지 2012. 5. 18.
반응형

http://developer.android.com/guide/topics/fundamentals/loaders.html 

- Activity 의 onCreate() 나 Fragment 의 onActivityCreated() 함수에서 다음과 같이 loader 를 초기화합니다.


// start new one or reconnect existing one.

getLoaderManager().initLoader(0, null, this); // id, constructor, callback


- id 가 이미 존재하는 녀석이면, 기존에 생성한 녀석을 재사용한다. 만약 id 가 존재하지 않는 녀석이라면, LoaderCallbacks 의 onCreateLoader() 를 호출하며, 새로 생성한다.


- 만약 기존의 녀석을 재사용하는데, 기존 녀석이 이미 데이터를 받아온 상태라면 바로 onLoadFinished 가 호출된다. 


- 기존에 존재하는 loader 를 버리려면 restartLoader() 를 호출. Loader 는 기존에 받아논 data 를 유지한다.




- LoaderCallbacks

 onCreateLoader() 에서 주로 Loader 를 만든다. 

 onLoadFinished() 는 data load 가 끝나는 순간 불리며, 이 시점에는 old data 가 살아있지만, 이녀석이 return 되는 순간 이전 data 는 날아가고, 새 data 가 들어온다. 이 부분을 주의해야 한다. 
 onLoaderReset() 은 loader 의 기존 data 가 reset 될 때 불리기 때문에 기존 data 를 refer 하여 사용하던 link 를 끊어 주어야 한다.


- loader 는 자동으로 data 를 더 이상 사용하지 않으면 release 하기 때문에 CursorLoader 를 사용하는 경우 해당 cursor 에 대해 close() 를 부르면 안된다. CursorAdapter 를 사용하는 경우에는 swapCursor() 를 써서 이전 Cursor 가 close. 되지 않도록 해줘야 한다.



도움이 되셨다면 손가락 꾸욱~




반응형

댓글