2013-01-04 4 views
-1

안드로이드에서 lazy loading listview에 대한이 자습서를 따르고 있습니다. http://www.coderzheaven.com/2012/09/23/simplest-lazy-loading-listview-android-data-populated-mysql-database-php/android에서 비동기가 작동하지 않습니다.

그러나 문제는 목록이 느슨하게로드되고 있지만 이미지가 제공된대로 순차적으로 다운로드된다는 것입니다. 즉 작은 이미지는 먼저 다운로드되지 않습니다. 이 튜토리얼에서 그들이 뭘 잘못하고 있니?

+0

아마도 자신의 코드 중 일부를 제공해야합니다. – Meatje

+0

나는 링크에서 동일한 코드를 따랐습니다. 이 어댑터에서만 변경했습니다. 스레드 스레드 = 새 스레드 { @Override public void run() { \t System.out.println ("Running"+ position); \t PbAndImage pb_and_image = new PbAndImage(); pb_and_image.setImg (holder.image); pb_and_image.setPb (holder.pb); \t 새로운 DownloadImageTask(). execute (pb_and_image); } }; thread.start(); getView() 메소드의 . – Vipin

답변

1

앱이 API 레벨 12 이상을 타겟팅하고 실행중인 경우 의도 한 동작이 될 수 있습니다. 코드를 실행하면 API 레벨 9 - 앱에서 지원하는 경우 동일한 동작이 발생합니까? 그렇지 않다면 문제가 될 수 있습니다.

API 레벨 12부터는 여러 개의 동시 AsyncTask이 기본적으로 순차적으로 실행되어 예기치 않은 오류 및 경쟁 조건이 발생할 가능성을 줄입니다. 그러나 execute()이 아닌 executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)으로 작업을 시작하면이 작업은 병렬로 실행되며 선행 작업이 완료 될 때까지 기다리지 않습니다.

더 자세히 읽고 싶으면 a good post by Dianne Hackborn 뒤에 그 이유가 설명되어 있습니다.

+0

"executeOnExecutor (...) - API 11이 필요합니다 .... – Radu

1

내가 알 수있는 한이 자습서에는 아무런 문제가 없습니다. getView()에서 코드를 사용하여 Asyntask를 시작합니다.

new DownloadImageTask().execute(pb_and_image); 

이며 비동기 키입니다.

결과적으로 UI 스레드에있는 getView 메소드 실행시 코드를 실행하는 대신 AsyncTask의 백그라운드 스레드에서 값 비싼 실행이 수행되고 해당 결과가 비동기 적으로 전달됩니다 . 각 행에 대한 getView 호출의 순서는 사용자가 제어 할 수 없으므로 순서가 보장되지 않습니다.

+0

크고 작은 이미지를 시도했지만 여전히 순차적으로 다운로드 중입니다. 이유를 모르겠다. – Vipin

관련 문제