【问题标题】:Android 1.5: Asynctask doInBackground() not called when get() method is calledAndroid 1.5:调用 get() 方法时未调用 Asynctask doInBackground()
【发布时间】:2010-03-23 19:13:11
【问题描述】:

我遇到了异步任务执行方式的问题。问题代码如下:

firstTask = new background().new FirstTask(context);
if (firstTask.execute().get().toString().equals("1")) {
    secondTask = new background().new SecondTask(context);
}

我在这里所做的是创建一个新的 asynctask 对象,将其分配给 firstTask,然后执行它。然后,我想在第一个异步任务完成后触发一个单独的异步任务,并确保它返回一个成功值(在本例中为 1)。 这在 Android 2.0 及更高版本上完美运行。但是,我正在使用 Android 1.5 进行测试,并且开始出现问题。上面的代码将运行第一个异步任务,但 doInBackground() 从未被调用,尽管 onPreExecute() 被调用。如果我要在没有 get() 方法的情况下执行第一个任务,则调用 doInBackground() 并且一切都按预期工作。除了现在我没有办法确定第一个任务是否成功完成,以便我可以告诉第二个任务执行。 假设这是 Android 1.5 上的 asynctask 错误是否安全?特别是因为 API (https://developer.android.com/reference/android/os/AsyncTask.html#get%28%29) 说 get 方法自 API 3 以来就已实现。 有没有什么办法解决这一问题?或者另一种方法来确定第一个任务已经完成?

【问题讨论】:

    标签: android android-asynctask


    【解决方案1】:

    如果你要阻止(通过get()),你为什么要首先打扰AsyncTaskAsyncTask 的全部要点是不阻止。

    如果您希望在FirstTask 完成后执行SecondTask,请让FirstTaskFirstTaskonPostExecute() 中执行SecondTask

    【讨论】:

    • 你好 CommonsWare,你看,firstTask 是一个登录任务,而 secondTask 是登录后从网站下载某些数据的各种任务之一。而不是通过登录任务传递参数来确定什么任务要在完成后执行,我宁愿有一个主任务来控制正在运行的任务并知道何时启动新任务。因此,我正在寻找一种方法来判断任务何时完成。此外,这不在 UI 线程上,因此这些线程不会减慢 UI。
    • 您通过在该任务上调用onPostExecute() 来判断任务何时完成。让每个任务告诉协调器“哟!我完成了!”,这样协调器就可以将下一条腿移到状态机中。
    • 从非主线程的另一个线程调用任务时需要get()。一个很好的例子是仪器测试,仪器线程必须经常等待AsyncTask 完成才能继续测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    相关资源
    最近更新 更多