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

Android Loaders Tutorial

by 돼지왕 왕돼지 2015. 11. 3.
반응형


 Android Loaders Tutorial

 

3.0, abstract loader, activity, Android, Android Loaders Tutorial, api summary, application, Async, asynctaskloader, config change, contentresolver, cursorloader, data, Example, fragment, initloader, load, LOADER, loadercallbacks, loadermanager, monitor, oncreateloader, onloaderreset, onloadfinished, restarting, restartloader, Return, simplecursoradapter, source data, swapcursor, tutorial




http://developer.android.com/guide/components/loaders.html


Android 3.0 부터 Loader 가 등장하여 async 하게 data 를 load 할 수 있게 되었다.

Loader 는 다음과 같은 특징이 있다.


- Activity, Fragment 에서 접근 가능하다.

- Data 를 async 하게 load 한다.

- Source data 를 monitor 하면서 내용이 변경되면 새로운 결과를 전달한다.

- config change 등과 같은 activity, fragment 의 recreation 시 기존 자료를 자동으로 reload 한다.




Loader API Summary


LoaderManager


Activity 혹은 Fragment 당 하나의 LoaderManager 가 있다.

LoaderManager 는 여러개의 Loader 를 가지고 있으며, 주로 CursorLoader 가 사용된다.



LoaderManager.LoaderCallbacks


LoaderManager 에 관련된 callback interface.

새로운 loader 를 만들 때 onCreateLoader() 가 사용된다.



Loader


실제로 data 를 async 하게 load 하는 abstract class.

Loader 는 Contents 의 변경이 있을 때 그 내용을 전달할 수도 있어야 한다.



AsnycTaskLoader


AsyncTask 를 제공하는 Abstract Loader.



CursorLoader


AsyncTaskLoader 의 subclass 로 ContentResolver 를 통해 query 를 하고 Cursor 를 return 한다.




Application 에서 Loader 사용하기


Loader 를 사용하기 위해서 다음과 같은 것들이 필요하다.


- Activity 혹은 Fragment


- LoaderManager instance.


- ContentProvider에 연결된 CursorLoader.

  Loader 나 AsyncTaskLoader 를 상속한 custom loader 도 가능하다.


- LoaderManager.LoaderCallbacks 구현.

 새로운 Loader 를 만들거나 기존 존재하는 loader 관리를 위해 필요하다.


- SimpleCursorAdapter 와 같은 loader가 제공하는 data 를 연계시킬 무엇.


- ContentProvider 와 같은 data 의 source




Starting a Loader


Loader 는 보통 activity 의 onCreate() 나 fragment 의 onActivityCreated() 에서 생성한다.


getLoaderManager().initLoader( 0, null, this );


param 은 순서대로 id, optional argument, LoaderManager.LoaderCallbacks.


initLoader() 함수는 loader 를 초기화시키고 활성화시킨다.

만약 명시한 ID 의 loader 가 이미 존재한다면, 가장 나중에 사용된 loader 가 재사용된다.

만약 명시한 ID 의 loader 가 존재하지 않으면, 새로운 로더를 생성해서 return 시켜준다.


보통 LoaderManager 를 통해 만든 Loader 의 reference 를 저장하지 않는다.

Loader 의 사용은 보통 LoaderCallbacks 을 이용한다.







Restarting a Loader


만약 기존 Loader 가 존재할 경우 그 data 를 버리고 싶다면,

initLoader() 대신 restartLoader() 를 호출해주면 된다.




Using the LoaderManager Callbacks


onCreateLoader() : Loader 가 처음 생성되었을 때 불린다.

onLoadFinished() : data load 가 끝났을 때 불린다.

onLoaderReset() : load 된 data 가 reset 되었을 때 불린다.




onCreateLoader


public Loader<Cursor> onCreateLoader( int id, Bundle args ){

Uri baseUri = Contacts.CONTENT_URI;

return new CursorLoader( getActivity(), baseUri, null, null, null, null );

}




onLoadFinished


SimpleCursorAdapter mAdapter;


..


public void onLoadFinished( Loader<Cursor> loader, Cursor data ){

mAdapter.swapCursor( data );

}




onLoadReset


SimpleCursorAdapter mAdapter;


..


public void onLoadReset( Loader<Cursor> loader ){

mAdapter.swapCursor( null );

}




example


http://developer.android.com/guide/components/loaders.html#example


ApiDemos 에 더 많은 sample 이 있다.







반응형

댓글