【问题标题】:ProgressDialog froze when a table is beeing populated with big amount of data当一个表被大量数据填充时,ProgressDialog 冻结
【发布时间】:2013-07-10 18:41:06
【问题描述】:

您永远不能在 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();
               ....
    }
}

【问题讨论】:

  • "有什么办法可以让 ProgressDialog 不“冻结”" 是的,不要在 UI 线程上完成所有工作。发布您正在做的事情的代码也有帮助
  • 好吧,我没有在 UI 线程中做这项工作。正如我所说,我启动了一个新线程来检索大量数据,但是当需要使用检索数据填充表时,我必须在 UI 线程中执行此操作,因为表是 UI 组件。
  • 你需要发布你在做什么的代码,否则它只是一个盲目的猜测
  • @tyczj:我在上面添加了一些伪代码。希望能帮助到你。这个问题更像是一个理论问题,而不是一个寻求帮助的问题。
  • 通过该代码 Martins 的答案就是您正在寻找的内容

标签: android multithreading progressdialog


【解决方案1】:

是的,有一种方法可以使对话框不冻结,那就是使用“延迟加载”技术,如果您要填充的数据量很大,请将其分成较小的部分并相应地填充,您需要实现一种机制来知道何时必须填充新的“新”数据,这在具有大量数据的应用程序中非常常见,通常使用“更新”或“刷新”消息...

希望这会有所帮助..

问候!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 2011-06-04
    相关资源
    最近更新 更多