2013-03-25 1 views
1

나는 API 15 이상의 새로운 조각과 조금 혼동스러워. 나는 진저 브레드 버전 인 낡은 API 10을 개발 해왔다. 내가 사용하려는 데이터를 얻으려는 방법은 AsyncTask을 사용하여 주 활동에 대한 데이터를 다운로드하고 내부 스토리지에 저장 한 다음 다른 AsyncTask을 사용하여 내 listview를 채 웁니다.
안드로이드 다운로드 데이터 및 목록에 대한 조각에

이제 API 15 Master Detail Flow로 시작하여 새로운 앱을 제작하기로 결정했습니다. 단편 작업 및 조각으로 시작되며 휴대 전화 및 태블릿에서 사용할 수 있습니다. 그래서 내 질문에 이전 방법을 사용하여 AsyncTask 그것은 여전히 ​​가능하거나 데이터를 다운로드하고 listview 채우는 다른 방법을 사용하는 것이 좋습니다 ??

답변

0

목록보기를 채우기 위해 로더를 사용하는 것이 좋습니다. onLoaderCreate, onLoaderFinish, onLoaderReset :

당신은 당신은 오버라이드 (override)하는 세 가지 방법을 얻을 것이다 ListActivity가 LoaderManager.LoaderCallbacks<E>

을 구현할 수 있습니다.

에서 onLoaderCreate는 로더에로드 할 객체를 지정하는 곳입니다. 커서의 경우,로드를 완료하면 커서 객체 (onLoaderFinish)를 반환하는 cursorLoader 객체를 만들 수 있습니다. 그런 다음 커서를 사용하여 어댑터를 listView에 채울 수 있습니다.

다운로드 할 Asyn과 같습니다. IntentService를 구현할 수 있습니다. 다음과 같은 방법으로 실행할 수 있습니다 :

Intent intent = new Intent(mContext, IntentService.class); 
startService(intent); 

당신은 broadcase 수신기를 사용하여 다시이 배경 서비스에서 전화를받을 수 있습니다.

+0

intentservice 정보, 알림 바에 진행 상황을 표시 할 수 있지만 앱 내에서만 진행 상황 만 표시하려면 Actionbar에서 말을 할 수 있습니까? 나는 앱에서 무거운 다운로드를하고있는 것이 아니라 단지 문자열 목록입니다. – Eric

+0

네, 그렇게하는 것이 쉽습니다. 여기에 어떻게해야할까요? [link] (http://android-er.blogspot.ca/2013/03/generate-notification-in-intentservice.html) – wangyif2

1

모든 버전의 API가 인터넷에서 데이터를 다운로드하는 것과 같이 장기간 실행되는 작업에 별도의 스레드 (이 경우 AsyncTask doInBackground 메서드)를 사용하는 것이 항상 좋습니다.

+0

다운로드 할 데이터가 작은 파일 크기인데 AsyncTask doInBackground를 내 FragmentActivity에서 다운로드 할 때 계속 생각하고 있으므로 작업 표시 줄에 진행률 표시 줄을 쉽게 넣을 수 있습니다. 그래, 괜찮 니? – Eric

+0

AsyncTask 클래스의 onPreExecute() 메서드를 사용하여 진행률 대화 상자를 표시 할 수 있습니다. 다운로드 시간이 오래 걸리면 서비스 사용을 고려해보십시오. –

0

느린 작업을 자신의 스레드에서 스핀 해제하고 싶습니다. 그러나 AsyncTask에주의하십시오. OS 버전 및 사용자 설정에 따라 한 번에 두 개 이상의 AsyncTask을 실행할 수 없기 때문입니다. 다른 답변 및 의견보기 here

+0

Well AsyncTask는 한 번에 하나씩 실행됩니다. 통지 덕분입니다. – Eric