【问题标题】:AsyncTask in Android onCreate method needs to run twice and update accordinglyAndroid onCreate 方法中的 AsyncTask 需要运行两次并相应更新
【发布时间】:2014-03-12 02:06:01
【问题描述】:

所以我对 AsyncTasks 的工作原理不是很了解,所以这可能就是我当前的代码无法正常工作的原因。如果我的 onCreate 方法中有一个 AsyncTask 正在运行:

  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    new UpdateSpinnerTask().execute(MainActivity.DUMMY_URI);
  }

然后它就可以正常运行了。然后,如果我单击一个按钮转到另一个活动(ListView),基本上我一直在做的是重新启动 MainActivity,以便重新创建我的视图。现在微调器任务随后无法正常工作。就像它没有做它应该在执行后做的事情。

一般看起来像:

    private class UpdateSpinnerTask extends AsyncTask<String, Void, List<String>> {
    @Override
    protected List<String> doInBackground(String... url) {
            }
    }

所以我的问题是,如果我想在我的 onCreate 中多次运行 AsyncTask 中的内容,这可能吗?

【问题讨论】:

  • 第二次启动 MainActivity 时到底发生了什么 - doInBackground() 被调用了,onPostExecute() 被调用了吗?是的,您可以多次运行 AsyncTask,但是您第二次未能实现的具体原因是什么,例如修改一些视图?
  • 我的坏人。我的 if 语句是一个愚蠢的错误。它运行正常。

标签: java android android-asynctask oncreate


【解决方案1】:

从另一个活动返回时,您是否希望 UpdateSpinnerTask 再次运行?那么,您应该将UpdateSpinnerTask 调用代码从onCreate() 移动到onResume()。因为onCreate()不是每次进入你的活动时都被调用。你应该知道更多关于Activity's lifecycle的信息。

【讨论】:

  • 每当我回到这个活动时,我都会重新启动它,所以这不是问题。感谢您的回复。
【解决方案2】:

这不是关于在onCreate() 中运行两次AsyncTask。这是关于在 2 个活动生命周期中生成 2 个单独的后台线程(重复使用相同的 AsyncTask 对象没有多大意义)。

如果您第二次调用execute() 时遇到问题,请尝试executeOnExecutor()(请注意,您只能对 API 11 及更高版本执行此操作)

另外,如果你能澄清你的问题(见我的评论),也许我可以给出更好的答案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2014-11-25
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多