티스토리 뷰
[원본-일문] http://blog.nkzn.net/entry/20120113/1326478800 변역기 번역본.
시대는 AsyncTask보다 AsyncTaskLoader
아무래도 시대는 AsyncTaskLoader 같습니다.
android-support-v4.jar에 있으므로 1.6 이상에서 사용할 수 있으며,
간단한것 같습니다. 일단 사용해보기로합시다.
AsyncTaskLoader | Developers
어디부터 어디까지가 AsyncTaskLoader 사용 처리인지 모르겠습니다.
AsyncTask 간단한 예로 @vvakame 의 JsonPullParser의 버전 샘플에 주목 해보십시오.
jsonpullparser--sample
HTTP에서 입수해온 JSON을 성형하여 ListView에 표시 할뿐. 알기 쉽다. AsyncTask 잘 모르는 저도 방향을 잡을 수 있었습니다.
이를 참고로하면서 AsyncTaskLoader 구현한 것이 다음입니다.
List
MainActivity.
package net.nkzn.android.sample.asynctaskloader;
import Java.util.List;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends FragmentActivity Implements LoaderCallbacks<List<String>> {
ArrayAdapter<String> mAdapter;
@ Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 결과 표시 용
ListView listView = (ListView) findViewById(R.id.listview);
mAdapter = New ArrayAdapter<String>(this , android.R.layout.simple_list_item_1);
listView.setAdapter(mAdapter);
// 로더를 초기화
Bundle args = New Bundle( 1 ); // onCreateLoader에 넘겨 줄 값은 여기에
getSupportLoaderManager().initLoader( 0 , args, this );
}
/ **
* 로더를 초기화 할 때 불린다.
* (이번 예라고 onCreate에서 초기화)
* /
@ Override
public Loader<List<String>> onCreateLoader(int ID, Bundle args) {
// 객체 만들어 전달하고
StringsDownloadTaskLoader loader = New StringsDownloadTaskLoader(getApplication());
loader.forceLoad(); // 이제로드가 시작된다. AsyncTaskLoader # onStartLoading에 구현하는 것도 가능.
return loader;
}
/ **
* 데이터 로딩이 완료 될 때 불리는
* @ param data AsyncTaskLoader # loadInBackground에서 반환 값
* /
@ Override
public void onLoadFinished(Loader<List<String>> loader, List<String> data) {
for(String s : data) {
mAdapter.add(s);
}
mAdapter.notifyDataSetChanged();
}
/ **
* 잘 와칸네
* /
@ Override
public void onLoaderReset(Loader<List<String>> loader) {
// TODO Auto-generated method stub
}
}
StringsDownloadTaskLoader.
package net.nkzn.android.sample.asynctaskloader;
import Java.util.ArrayList ;
import Java.util.List;
import android.content.Context;
import android.support.v4.content.AsyncTaskLoader;
public class StringsDownloadTaskLoader extends AsyncTaskLoader<List<String>> {
/ **
* 생성자.
* super (Context)를 실행할 수 분 생성자의 인수는 뭐든지 OK.
* 이 예제에서는 MainActivity # onCreateLoader에서 호출됩니다.
* /
public StringsDownloadTaskLoader(Context context) {
super(context);
}
/ **
* 백그라운드 처리하고 싶은 것.
* 파라미터 지정 형식으로 데이터를 반환해야한다.
* /
@ Override
public List<String> loadInBackground () {
List<String> strings = New ArrayList<String>();
try {
Thread.sleep( 500 ); // 데이터 읽기 대신
strings.add("hogehoge");
strings.add("hugahuga");
} catch(InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return Strings;
}
}
개인적 정리
- Web의 작은 파일이 필요할 때 스레드 관리의 번거 로움에서 해방.
- Activity / Fragment에서 분리 할 때문에 코드가 깨끗.
- AsyncTask나 Thread 관리를 기억할 부담에서 일시적으로 해방.
'모바일 > Android' 카테고리의 다른 글
| Android Action Bar Style Generator (안드로이드 액션바 스타일 생성기) (0) | 2012.12.26 |
|---|---|
| Android ListView에 Disclosure Indicator 구현 (0) | 2012.12.24 |
| Eclipse Android 에뮬 속도 빠른 BlueStacks App Player로 대체하기 (2) | 2012.12.19 |
| Android Fragment 튜토리얼 링크들 (0) | 2012.12.18 |
| Actionbar Sherlock 4.0 시작해보기 (0) | 2012.12.17 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 워드프레스
- API
- javascript
- centos
- CSS
- JSON
- nginx
- IOS
- Debug
- PHP
- classic asp
- sencha touch
- Mac
- macos
- 한글
- mssql
- iphone
- nodejs
- Prototype
- Wordpress
- Docker
- iis
- ASP
- 안드로이드
- IE
- laravel
- Linux
- Android
- git
- JQuery
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
글 보관함
Blog is powered by
Tistory / Designed by
Tistory