【问题标题】:Android two AsyncTasks serially or parallel execution? - The second is freezing but the result is okAndroid 两个AsyncTasks 串行还是并行执行? - 第二个是冻结但结果还可以
【发布时间】:2013-09-06 15:26:50
【问题描述】:

我在我的 Android 应用程序中运行两个 AsyncTask 任务,它们来自同一类但具有不同的参数。例如:

new myAsynckTask(a,b,c).execute();
new myAssyncTask(a,d,e).execute();

它们是并行执行还是串行执行?我问这个是因为当第一个开始时,显示执行进度,当完成时我看到第二个需要更多时间才能完成但我看不到进度(我可以看到矩形但进度条没有显示 20%..等等)。这就像冻结,但结果还可以。

我想做的是按顺序运行它们,并且能够看到它们两个的进度。 我在 Android Jelly Bean 4.2.2 API Level 17 上运行应用程序

【问题讨论】:

    标签: java android android-asynctask progress-bar


    【解决方案1】:

    它们是并行执行还是串行执行?

    如果您的android:targetSdkVersion 为 13 或更高,并且您在 Android 3.2 或更高版本的设备上运行,它们将被串行执行。

    如果您在 Android 1.5 上运行,它们将被串行执行。

    否则,它们将并行执行。

    您可以通过将execute() 替换为executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR) 来选择并行执行。

    有关更多信息,请参阅the AsyncTask JavaDocs 的“执行顺序”部分。

    【讨论】:

      【解决方案2】:

      您的问题的答案是:这完全取决于您在哪个版本的 Android 上运行它,这是我在多个应用程序中遇到的一个大问题。

      如果您想了解如何正确运行它们,您应该查看this link

      【讨论】:

        【解决方案3】:

        更新:复制自 Android Developers 并由 Yazazzello 发起

        "此类在 API 级别 26.0.0-alpha1 中已弃用。使用 AsyncTask 直接。”

        您应该将它用于并行执行:

        AsyncTaskCompat.executeParallel(new AsyncTask<Param, Void, Data>() {
                        @Override
                        protected Data doInBackground(Param... params) {
                            return downloader.getData(params[0]);
                        }
        
                        @Override
                        protected void onPostExecute(Data response) {
                            processData(response);
                        }
        }, param);
        

        【讨论】:

        • 'AsyncTaskCompat' 此类在 API 级别 26.0.0-alpha1 中已弃用。直接使用 AsyncTask。
        猜你喜欢
        • 2017-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-25
        • 2018-06-25
        • 1970-01-01
        • 2011-11-02
        • 1970-01-01
        相关资源
        最近更新 更多