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();
....
}
}
"ProgressDialog를"고정 "하지 않도록 할 방법이 있습니까? 예, UI 스레드에서 모든 작업을 수행하지 마십시오. 당신이 무엇을하고 있는지에 대한 코드를 게시하는 것이 도움이됩니다. – tyczj
글쎄, 나는 UI 스레드에서 일을하지 않을 것입니다. 앞서 말한 것처럼 많은 데이터를 검색하기위한 새로운 스레드를 시작하지만 retrieevd 데이터로 테이블을 채울 때 테이블이 UI 구성 요소이므로 UI 스레드에서이를 수행해야합니다. – Rox
당신이하고있는 일에 대한 코드를 게시해야합니다. 그렇지 않으면 그저 눈먼 것 같아요. – tyczj