1

在我离开活动之前,我有 2 个异步任务(执行服务器请求)正在运行。有时运行此异步任务的活动会卡住,直到异步任务完成,有时下一个活动会显示并卡住,直到异步任务完成。

我的问题是我如何以我的活动的 UI 不会卡住的方式运行此任务(UI 不依赖于异步任务中的响应)

4

5 回答 5

1

您可能正在调用AsyncTask.get() 活动代码中的某个位置。如果您在任务完成执行之前调用它,它会等到它完成(从而使您的 UI 卡住)。

于 2012-11-07T14:17:59.733 回答
1

你能试试这个。

  1. 创建一个 ProgressDialog 将其设置为不确定并显示它。
  2. 调用 AsyncTask1 并在其 PostExecute 中调用 AsyncTask2。确保你需要调用这个 onUiThread。
  3. 在 Asynctask2 的 Postexecute 中,关闭 Progress 对话框并启动下一个 Activity。
于 2012-11-07T15:24:20.153 回答
0

确保您在onPostExecute()第一个异步任务中开始您的下一个活动。如果您在新活动中有一个异步任务,请将其作为 onCreate 方法的最后一项调用。遵循这些简单的规则应该会有所帮助

于 2012-11-07T15:20:13.430 回答
0

只写代码AsyncTask doInBackground()并调用它。这样您就可以检查它是否正在访问任何 UI。

例如:TestAsync extends AsyncTask...

TestAsync async = new TestAsync();
async.execute();

尝试这个。通常,AsyncTask应该在单独的线程中运行。如果创建两个实例。并调用execute,它应该独立执行。但是可能只有一个线程可用,所以它应该等待(在较低版本中,池大小为 1。)。

@TargetApi(Build.VERSION_CODES.HONEYCOMB) // API 11
void startMyTask(AsyncTask asyncTask) {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
        asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
    else
        asyncTask.execute(params);
}

其他方式是,您应该在普通线程中运行它。

于 2016-09-12T06:36:06.800 回答
-1

您必须在您的活动中一次调用 2 个活动

  1. 所以要么你必须使用同步类或函数来调用异步任务

  2. 或者您必须使用单例类来调用该异步任务,以便以同步方式调用 api

  3. 因为异步任务使用主 ui 线程来完成任务,所以这可能是活动卡住的原因

于 2016-09-12T06:32:13.340 回答