3

嗨,我的应用程序中有一个 AsyncTask,在 OnCreate() 中调用,它通过网络检索一些数据并在下载时显示一个不确定的进度条。

问题是当我启动应用程序时屏幕保持空白,直到 AsyncTask 完成。代码是这样的。

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    loadData();
    //Several UI Code   
    startAsyncTasks();
}


 private void startAsyncTasks(){
    new ConnectingTask().execute();
 }
4

1 回答 1

1

OnCreate() 在 Activity 显示在屏幕上之前执行,因此整个数据下载过程在显示 Activity 之前执行。

解决方案可能是在 OnStart() 方法中而不是在 OnCreate() (也被覆盖)中启动 AsyncTask。OnStart() 将在屏幕上显示活动时执行(请参阅活动生命周期)。

这是我在我的应用程序中实现的情况并且它有效。您应该在 OnStart() 方法中显示一个进度对话框,并在适​​当的时候在 AsyncTask 中更新和关闭它。

这是它在我的应用程序中的外观:

  1. AsyncTask 在活动 OnStart() 中启动并显示对话框
  2. 正在扩展 AsyncTask 的内部类中下载数据
  3. 下载数据后,对话框关闭并初始化进一步的数据处理 (OnPostExecute())

缺点可能是 OnStart() 在第一次活动调用时被调用,但也在恢复它之后(例如在最小化应用程序之后)。因此,与 OnCreate() 相反,AsyncTask 可以执行几次,即只调用一次 - 在创建活动时(而不是在恢复活动时)。

如果您使用 AsyncTask 中的对话框对此类活动进行 jUnit 测试,也可能会出现一些问题 - 如果您这样做,请告诉我 - 将发布一些解决方案

于 2012-03-17T10:16:43.583 回答