목록보기의 어댑터를 다시 설정하여 목록보기를 새로 고치는 메소드가 있습니다. 어댑터가 설정되면 각 목록 항목에 대한 축소판 이미지가 다운로드됩니다.Android : 비동기 적으로 별도의 스레드에서 메소드 실행
새 스레드에서 refreshListView()라는이 메서드를 실행하여 비동기 적으로 이미지를 다운로드 할 수 있지만 별도의 스레드에서 UI를 업데이트 할 수 없다는 것을 알고 있습니다.
대체 방법은 무엇입니까?
미리 감사드립니다.
목록보기의 어댑터를 다시 설정하여 목록보기를 새로 고치는 메소드가 있습니다. 어댑터가 설정되면 각 목록 항목에 대한 축소판 이미지가 다운로드됩니다.Android : 비동기 적으로 별도의 스레드에서 메소드 실행
새 스레드에서 refreshListView()라는이 메서드를 실행하여 비동기 적으로 이미지를 다운로드 할 수 있지만 별도의 스레드에서 UI를 업데이트 할 수 없다는 것을 알고 있습니다.
대체 방법은 무엇입니까?
미리 감사드립니다.
AsyncTask (http://developer.android.com/reference/android/os/AsyncTask.html) 또는 로더 (http://developer.android.com/guide/topics/fundamentals/loaders.html)를 사용할 수 있습니다. 나는 항상 더 쉬운 것처럼 보이는 로더를 사용하는 것이 좋습니다. 두 가지 모두 (이 중에서도) 특히 이런 유형의 문제에 맞게 설계되었습니다.
3.0 미만의 대상 플랫폼에서 로더를 사용하려면 http://developer.android.com/sdk/compatibility-library.html을 참조하십시오.
AsyncTask를 또한 UI 요소 업데이트를 백그라운드 작업을 조정 작동 :
http://developer.android.com/reference/android/os/AsyncTask.html
음을. 맞다면 이미지 다운로드가 끝나기 전에 새 어댑터를 사용하고 싶지 않을 것입니다. 어디 어댑터에서 이미지 다운로드 코드입니다. 그에 따라, 어댑터의보기가로드/표시되면 다운로드 코드에만 액세스 할 수 있습니다.
보통 이미지를 백그라운드 스레드에서 다운로드하고이를 (SoftReferences의) 콜렉션에 버퍼링합니다. 그런 다음로드 할 때 해당 컬렉션에서 어댑터를 읽습니다.
앞서 언급했듯이 다른 스레드에서 실행되는 AsyncTask를 사용할 수 있으며 별도의 스레드가 축소판을 다운로드하면 UI를 업데이트 할 수 있습니다. 구현 방법에 따라 AsyncTask의 onProgressUpdate() 메서드를 사용하여 다운로드 할 때 미리보기 이미지를 업데이트 할 수도 있습니다. 그렇지 않으면 onPostExecute를 사용하여 목록 어댑터를 다시 설정하십시오.
다음은 전체 코드입니다.
http://stackoverflow.com/questions/541966/android-how-do-i-do-a-lazy-load-of-images-in-listview/559781#559781
manifest의 targetSDKVersion을 "2"로 설정하면 위 코드가 이미지를로드하는 것처럼 보입니다. 이것이 이미지를로드하는 가장 좋은 방법입니까? targetSDKversion을 2로 설정하지 않으면 자리 표시 자 이미지 만 표시되고 이미지는 다운로드되지 않은 것처럼 보입니다. – EI756
로더는 3.0 이상 현재 사용 가능한 휴대 전화에서는 사용할 수 없습니다. –
@PeterKnego 사실이 아닙니다. 안드로이드 호환성 패키지를 사용하면 누구나 쉽게 로더에 액세스 할 수 있습니다. http://developer.android.com/sdk/compatibility-library.html –
Ahh, nice. 정보 주셔서 감사합니다. +1에 먼저 답하십시오. –