2013-07-10 1 views
0

UI 스레드 (기본 스레드) 외부에서 UI 작업을하지 마십시오. 이 경우 수행 할 작업 :테이블에 많은 양의 데이터가 채워진 경우 ProgressDialog 동결

엄청난 양의 데이터를 검색하려면 새 스레드를 실행하십시오. 한편, 작업을 나타내는 ProgressDialog를 보여줍니다. 데이터가 검색되면 주 스레드를 호출하고 테이블을 채 웁니다. 거대한 데이터로드로 테이블을 채우는 경우 ProgressDialog는 UI 스레드가 테이블을 채우는 작업으로 잠시 동안 "고정"됩니다.

테이블을 채우는 동안 ProgressDialog를 "정지"시키지 않는 방법이 있습니까?

public class MyActivity extends Activity { 
    private ProgressDialog progressDialog; 
    private TableLayout tableLayout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     tableLayout = (TableLayout)v.findViewById(R.id.myTable); 

     progressDialog = ProgressDialog.show(this, "", "Loading..."); 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       final List<Data> data = fetchBigDataFromInternet(); 
       MyActivity.runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         tableLayout.removeAllViews(); 
         for(Data d : data) { // This makes the progressDialog to freeze 
          TableRow tableRow = new TableRow(MyActivity.this); 
          tableLayout.addView(tableRow); 
         } 
        progressDialog.dismiss(); 
       .... 
    } 
} 
+0

"ProgressDialog를"고정 "하지 않도록 할 방법이 있습니까? 예, UI 스레드에서 모든 작업을 수행하지 마십시오. 당신이 무엇을하고 있는지에 대한 코드를 게시하는 것이 도움이됩니다. – tyczj

+0

글쎄, 나는 UI 스레드에서 일을하지 않을 것입니다. 앞서 말한 것처럼 많은 데이터를 검색하기위한 새로운 스레드를 시작하지만 retrieevd 데이터로 테이블을 채울 때 테이블이 UI 구성 요소이므로 UI ​​스레드에서이를 수행해야합니다. – Rox

+0

당신이하고있는 일에 대한 코드를 게시해야합니다. 그렇지 않으면 그저 눈먼 것 같아요. – tyczj

답변

2

는 예를 채우기되는 데이터의 액수가 큰 경우, 작은 부분에서 휴식하고 그에 따라 채우고, 거기에 대화 상자가 동결하지 않도록 할 수있는 방법이며, "게으른로드"기술을 사용하여 이잖아 , 데이터의 새로운 "부분"이 채워 져야 할 때를 알 수있는 메커니즘을 구현해야합니다. 대용량 데이터가있는 앱에서 매우 일반적으로 사용되며 일반적으로 "업데이트"또는 "새로 고침"메시지가 사용됩니다 ...

희망이 도움이 .. ..

감사합니다!

관련 문제