【问题标题】:Android AsyncTask andAndroid AsyncTask 和
【发布时间】:2010-11-08 15:21:45
【问题描述】:

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

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

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

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


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

【问题讨论】:

  • 那么,如果你注释掉 startAsyncTasks() 行,UI 看起来会更快吗?
  • 可能值得发布您的 AsyncTask 的代码,因为问题可能就在那里。
  • 只要确保您在 ConnectingTask.doInBackGround() 中完成所有网络(长时间运行的工作)。这应该保证主 UI 标题在繁重的工作中不会被阻塞,因此它将能够显示 Activity 的 UI 元素。

标签: android android-asynctask oncreate


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-12-14
    • 2021-09-27
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 2014-08-19
    • 1970-01-01
    相关资源
    最近更新 更多