-
안드로이드 Loader개발/안드로이드 2019. 7. 15. 21:20
앞선 포스트에서 onSaveInstanceState 콜백을 통해 화면을 전환하는 경우에도 데이터를 저장할 수 있는 방법을 배웠다. 그런데 AsyncTask 처럼 진행중인 작업에 대해서는 데이터를 저장할 수 있는 기능이 무의미할 것이다. 어디까지 데이터 작업을 처리 했으니 이때부터 다시 시작하라고 세세하게 할 수도 없는 노릇이고.
그래서 안드로이드에서는 Loader라는 라이브러리를 뒀다. 공식 문서에서는 FragmentActivity에 넣을 디스플레이 소스를 로드할 수 있는 기능으로 소개되고 있는데 일단은 별도의 쓰레드에서 돌아 Activity 생성 주기에 영향을 받지 않는 컴포넌트 정도로 이해하면 될 것 같다. 사용법은 아래와 같다.
1. implements LoaderManager.LoaderCallbacks<String>
MainActivity는 Loader API를 사용하는 Activity임을 명시 해둬서 Loader 콜백 함수들을 호출하도록 만든다.
public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<string> { {
2. public Loader<String> onCreateLoader
Activity에서 사용할 Loader 객체를 생성하는 콜백 함수를 구현한다. Loader는 AsyncTaskLoader와 CursorLoader가 있는데 CursorLoader 의 경우에는 DB에서 값을 읽어올 때 사용하고 AsyncTaskLoader 는 좀더 범용적으로 사용된다.
2.1 protected void onStartLoading()
AsyncTaskLoader 가 생성 되면서 가장 먼저 실행되는 함수다. AsyncTask의 onPreExecute() 의 역할을 하는 것과 비슷하다. 백그라운드 작업 실행 하기 전에 필요한 셋팅 작업을 여기에 넣는다.
2.2 public String loadInBackground()
백그라운드 작업을 실행하는 함수다. 이름을 보면 감이 오겠지만 AsyncTask의 doInBackground(Void... voids) 와 동일한 기능을 하는 함수다. 반환 타입으로 세팅된 String은 결과 값의 타입이며 앞서 콜백을 implements 할 때 어떤 타입을 넣느냐에 따라 바꿀 수 있다.
2.3 public deliverResult(String result)
결과 값을 전달하는 함수다. 이 함수내에는 반드시 super.deliverResult(result); 가 포함되어 있어야지 결과 값이 최종적으로 전달 된다. 인자인 result 는 loadInBackground()에서 반환한 값이다
3. public void onLoadFinished(Loader<String> loader, String data)
AsyncTaskLoader 작업이 끝난 후에 불리는 함수이며 함수의 인자로 결과 값을 전달 받는다. 결과값을 화면에 업데이트 할 때 이 콜백 함수 내에 작업을 넣는다.
4. initLoader,restartLoader
생성한 Loader가 실행 될 수 있도록 호출한다. 아래 코드는 initLoader,restartLoader 함수를 실행한 예제 코드다.
LoaderManager loaderManager = getSupportLoaderManager(); Loader<string> searchLoader = loaderManager.getLoader(SEARCH_LOADER); if (searchLoader == null) { loaderManager.initLoader(SEARCH_LOADER, queryBundle, this); } else { loaderManager.restartLoader(SEARCH_LOADER, queryBundle, this); }
함수의 첫번째 인자 값은 ID다. Loader마다 가지고 있는 고유한 Key값에 해당한다. 두번째 인자 값은 Bundle형태의 데이터 값이다. AsyncTaskLoader에게 이 데이터 값을 통해 값을 전달 할 수 있다. 세번째는 콜백함수다. 현재는 Activity가 Loader 콜백 함수를 구현해뒀기 때문에 this로 입력했다.
'개발 > 안드로이드' 카테고리의 다른 글
RxJava - Create 함수 (0) 2019.08.11 RxJava - Observable, Observer (2) 2019.08.10 onSaveInstanceState (0) 2019.07.15 JAVA의 static (0) 2019.04.03 안드로이드 Service (0) 2019.03.19