【问题标题】:Progress bar to show only during long operations进度条仅在长时间操作期间显示
【发布时间】:2011-08-09 10:07:56
【问题描述】:

我正在设计一个应用程序,它通过单击按钮从 sqlite 数据库中获取数据。仅当过程很长(例如超过 3 秒)时,我才想在获取期间显示等待消息或进度条。否则它可以继续程序。我该怎么做呢 。我尝试使用以下代码显示进度对话框,但它只等待指定的睡眠时间并继续进行而不显示任何内容....请帮助

protected void GetOrders() 
{
    ProgressDialog dialog = null;
    try
    {
        dialog=ProgressDialog.show(loginScreen.this,"PLEASE WAIT","LOADING CONTENTS ..",true);
        //Accesses database 
        allOrders=ProductionOrdersBL.GetOrder();
        Thread.sleep(4000);

    }
    catch(Exception e){}
    finally
    {
        dialog.dismiss(); 
    }
}

【问题讨论】:

    标签: android multithreading dialog thread-safety waithandle


    【解决方案1】:

    首先要显示进度条,您应该使用 AsyncTask()(this)。然后在其preExecute() 方法中说

    try{
    thread.sleep(3000);
    dialog=ProgressDialog.show(loginScreen.this,"PLEASE WAIT","LOADING CONTENTS ..",true);
    
    }catch(){
    }
    

    然后在 postExecute() 中使用

    if(dialog.isShowing()){
     dialog.dismiss
    }
    

    【讨论】:

    • 嘿,我还是卡住了...... AsyncTask 中的 doInBackground() 方法甚至在它完全完成之前返回到 postExecute 方法......我该如何阻止它?
    • 那是不可能的事情......这永远不会发生。可能还有其他问题,可能是从服务器获取数据时出现异常。只有在 doInBackground() 完成后才会调用 postExecute()..
    • 好吧,想象一下……我在 preExecute() 和 doInBackground() 上显示我的对话框,我调用 thread.sleep(4000) 并在 postExecute() 中调用 dialog.dismiss() 。 postExecute() 方法甚至在休眠期完成之前执行。这是因为我正在使用线程或其他东西....
    • 不要把 sleep 方法放在 doInbackgeround() 中,像我说的那样做 preExecute()。然后在 postExecute() 中使用 if(dialog.isShowing()){}
    • 这个想法是我的数据库访问发生在 doinbackgrnd() 方法中。到目前为止,我正在填充虚拟数据,所以我想在 doinbackgrnd() 方法中造成延迟,就像在数据库获取期间可能发生的情况一样。我观察到的是,在调用 postExecute 函数时,此方法仍在运行……我什至尝试给嵌套的 for 循环以导致延迟,但 postExecute 甚至在循环完成之前就被调用了……这怎么可能...
    【解决方案2】:

    我找到了解决方案...调用execute方法后我进行了一些操作。因此,当 doInBackground() 方法在非 UI 线程中执行时,我的 UI 线程只是继续执行执行方法调用之后的代码......解决方案是在执行方法调用之后在主 UI 线程中不执行任何任务:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      • 1970-01-01
      • 2011-05-30
      • 2014-07-26
      相关资源
      最近更新 更多