Android 显示 ProgressDialog 直到 Activity UI 加载完成

4

您好,我正在尝试在活动加载时显示进度对话框。我的问题是,尽管我已经完成了活动中的所有工作,但活动需要很长时间才能加载,我怀疑这是因为我在ViewFlipper中使用了多个视图,其中包含多个ListView和自定义数组适配器。UI需要很长时间才能显示。

我应该如何检查活动中所有UI是否已经完成加载?

或者是否有一种预加载所有活动和UI的方法?

谢谢!


你是在同一线程上执行“工作”和UI吗?在同一线程上加载列表视图等内容会阻塞活动的显示。 - Ryan Conrad
我正在OnCreate()中进行工作,以便生成视图,然后调用setContentView(); 然而,OnCreate()完成后,所有对OnStart()和OnResume()的调用也都完成了,但我要过大约8秒才能看到UI。 - totem
2个回答

0

使用Asynctask

  new DownloadTask().execute();


  private class DownloadTask extends AsyncTask<String, Void, Object> {

    protected void doInBackgroind(Void... arg0){
    //Do time Consuming Processing
    publishProgres()
    return null;
    }

    protected void onProgressUpdate(Void... arg0){
    }

    protected void onPostExecute(Void... result){
    log.i("AvtivityInfo", "activity finished loading...");
    }

}    

不确定那是否有效...我得自己试一下。 - Cristian
这会如何帮助?我的问题是,尽管活动已经接收到所有可见的指示消息,例如“public void onWindowFocusChanged(boolean hasFocus)”,但UI仍未显示。所有UI内容都在onCreate中,我怀疑ListView适配器正在后台执行某些操作,这可能是主要问题。 - totem
问题在于这不是一个“任务”,这里没有下载、通信或任何异步操作,它只是从 XML 中加载资源,并且所有这些都发生在 OnCreate 中,它只需要不到一秒钟的时间来完成,但是 UI 真正可见需要大约 8 秒钟左右。 - totem
尝试使用此示例了解https://dev59.com/h3I-5IYBdhLWcg3wMFMf,在UI中显示progressDialog,直到数据完全加载。如果在8秒后看到UI,则表示有一个进程阻塞了您的UI,可能是您的ArrayAdapter加载。 - Jorgesys
我同意ArrayAdapter的加载是导致UI不可见的原因,我的问题是如何检查它是否已经完成加载? - totem
protected void onPostExecute(Void... result){ log.i("AvtivityInfo", "activity finished loading..."); } - Jorgesys

0

如果你认为你需要一个ProgressDialog,因为你的活动打开得太慢了,那么你有更大的问题。Android很可能会用一个活动无响应的错误来终止你的活动。

你可以变得复杂一些,使用Traceview来找到你的性能问题,或者你可以尝试一下。例如,你可以跳过在你的ListViews中设置适配器,以确认问题确实存在于那里。

Jorgesys在他现在已删除的条目中给出了正确的答案,从我所看到的情况来看。我怀疑加载你的适配器需要时间,也许是在数据库查询中,你需要将其中一些移动到AsyncTasks中。


这就是问题所在,没有数据库查询,只有与可绘制对象和布局的工作。我想不出要将什么内容分解为AsyncTasks,因为所有的工作都在OnCreate中完成,而这非常快速。ArrayAdapter是否异步加载?如果是,有没有一种方法可以检查它何时完成加载? - totem
@totem: "ArrayAdapter是否异步加载?" 不是的。 - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接