2012-05-09 6 views
0

30 개 이상의 이미지를 페이지에로드해야합니다 (티저 텍스트 포함). AsyncTask를 통해 모든 이미지를로드하지만 기본 스레드의 뷰에 대한 수정 만 수행 할 수 있기 때문에 현재 레이아웃을 수정할 수 없습니다. 내 응용 프로그램이 "페이지로드"동안 응답하지 않아도되도록 모든 것을 비동기 적으로로드하는 가장 좋은 방법은 무엇입니까?안드로이드 배경보기 활동을위한 활동

답변

0

왜 레이아웃을 수정할 수 없습니까? AsyncTask의 경우 UI 스레드에서 실행되도록 onProgressUpdate이 있어야합니다. doInBackground 코드에 publishProgress으로 전화하면됩니다.

== 업데이트 ==는

private class LoadImageTask<Url, String, String> extends AsynTask{ 
    doInBackground(Url... urls){ 
     for(int i=0; i<urls.length; i++){ 
      File img = DownloadImage(urls[i]); // Your download method.. 
      publishProgress(img.filename);  // Suppose it is saved in sd card 
      // publish progress will call onProgressUpdate immediately, but on different thread 
     } 
    } 

    onProgressUpdate(String filename){ 
     // Update the UI.. this method will run on UI thread 
     displayImage(filename); 
    } 
} 
+0

의지를 사용할 수 있습니까? 아니면 내 메인 스레드를 "일시 중지"할까요? – Jacksonkr

+0

onProgressUpdate가 일시 중지되므로 UI ​​만 업데이트됩니다. Loading가 doInBackground에서 수행된다고 가정합니다. 내 업데이트 대답을 확인하십시오. – xandy

0

난 당신이 백그라운드에서보기를 구축 할 수 있다고 생각하지 않습니다. 진행률 대화 상자를 표시하여 사용자가 왜 앱이 바쁜지를 이해할 수있는 가장 좋은 방법입니다. 클래스 활동을 확장하는 경우

+0

작업이 별도의 스레드에서 실행되고 있지 않으면 진행 대화 상자도 차단됩니다. – xandy

0

, 당신은 여전히 ​​비동기하지만 실행

runOnUiThread(new Runnable() { 
    public void run() { 
     //Update UI elements in this block 
    } 
}); 
+0

이것이 끝날 때까지 내 메인 스레드를 차단합니까? – Jacksonkr

+0

대기열에있을 때 주 스레드에서 실행됩니다. 이미지를로드하는 스레드는 여전히 계속 실행됩니다. – PinoyCoder