你永远不能在 UI 线程(主线程)之外使用 UI 的东西。但是在这种情况下该怎么办:
运行一个新线程来检索大量数据。同时,显示一个表示工作的 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();
....
}
}