2014-07-07 2 views
1

메인 스레드에 그림을 여러 개로드해야하는데로드 중 대화 상자를 표시하고 싶지만 진행 상황 대화 상자를 표시 할 수 없습니다.그림로드 중 진행 대화 상자가 표시되지 않습니다.

아래

내 코드 : 그것의 의견을 수정하기 때문에

private ProgressDialog progress; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.background); 

    progress = ProgressDialog.show(this, "",getString(R.string.background_loading), true); 

    LoadBackgrounds loadB = new LoadBackgrounds(); 
    new Thread(loadB).start(); 

} 

public class LoadBackgrounds implements Runnable { 
    @Override 
    public void run() { 

     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       loadPictures(); 
       progress.dismiss(); 
      } 
     }); 
    } 
} 

loadPictures()runOnUiThread 내에서 호출해야합니다. 사진이로드되는 동안 진행률 대화 상자가 표시되지 않는 이유는 무엇입니까?

+0

문제에 대한 정확한 답변을 드릴 수는 없지만 AsyncTask는 문제없이 수행 할 수 있습니다. 백그라운드에서 loadPictures를 수행하고 progress.dismiss를 실행하십시오. – PedroHawk

+0

실행 중 대화 상자를 닫으므로 진행 상태 대화 상자가 표시되지 않을 수 있습니다. . 댓글 후 확인 progress.dismiss(); 이 코드. – MFP

+0

대화 상자를 표시하기 위해 다른 스레드가 필요합니다. AsynTask를 사용할 수 있습니다. –

답변

5

나는 100 % 확실하지 오전하지만 여기 내 생각이다

  1. 당신은 UIThread 별도로 실행해야 스레드를 만들 수는 있지만, 그 내부에는 UIThread이 스레드를 병합 runOnUiThread()를 호출합니다.
  2. 다른 스레드에서 실행되는 실행 파일을 만드는 스레드에서 실행할 실행 파일을 만듭니다. 나는 당신이 그 말도 안되는 것을 이해해야한다고 생각한다.
  3. loadPictures()은 UIThread의 속도를 늦춰서 진행 대화 상자를 보지 못하게되고로드가 끝나면 곧바로 진행 대화 상자가 보이지 않을 수 있습니다.
  4. 또한 ANR 대화 상자 (응용 프로그램이 응답하지 않음)를 얻거나 logcat 출력에 많은 Skipped X frames! The application may be doing too much work on its main thread. 메시지가 표시되는 것으로 생각됩니다.

내 조언하고 loadPictures() 방법이 실제로 무엇을하는지에 따라 : 당신이 서버에 액세스 할 때 Volley 또는 RetroFit 같은 라이브러리를 확인, 사진을 얻기 위해 AsyncTask를 이상을 사용하고 데이터를 얻을 수를 사용합니다.

+0

당신의 추측에 맞춰 어디에서 ... AsyncTask를 사용했는데 완벽하게 작동했습니다. 감사합니다! – Monica

+0

+1 항상 좋은 답변으로! –