ASyncTasks 阻塞其他任务

2024-04-19

我有 2 个 ASyncTasks,一个从 httpPost 检索值,另一个更新 UI 的一些元素(包括列表视图)。 问题是,由于两个 ASyncTasks 共享相同的后台线程,如果网络操作首先启动并且运行缓慢(由于网络连接不良)。其他后台线程花费太多时间,使应用程序不负责任。

由于两个 ASyncTasks 都是独立的,因此让另一个 ASyncTasks 等待是非常愚蠢的。不同的类使用不同的线程会更符合逻辑,我错了吗?

正在阅读异步任务 http://developer.android.com/reference/android/os/AsyncTask.html文档。谈论使用执行执行器(),但是在 API 级别低于 11 的情况下如何解决这个问题呢?

这是一个重现“问题”的小例子

        new Task1().execute();
        new Task2().execute();

With

public class Task1 extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... params) {
        GLog.e("doInBackground start 1");
        SystemClock.sleep(9000);
        GLog.e("doInBackground end 1");
        return null;
    }

    @Override
    protected void onPreExecute() {
        GLog.e("onPreExecute 1");
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(Void result) {
        GLog.e("onPostExecute 1");
        super.onPostExecute(result);
    }

}

public class Task2 extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        GLog.e("onPreExecute 2");
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... params) {
        GLog.e("doInBackground start 2");
        SystemClock.sleep(9000);
        GLog.e("doInBackground end 2");
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        GLog.e("onPostExecute 2");
        super.onPostExecute(result);
    }

}

这就是我在代码中处理这个问题的方式:

if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ) {
    new MyAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
    new MyAsyncTask().execute();
}

并更换MyAsyncTask和你的Task1 and Task2分别。 Honeycomb 中出现了 AsyncTask 的基本变化(请参阅 Android SDK 文档here http://developer.android.com/reference/android/os/AsyncTask.html在“执行顺序”部分),所以在此之前,您像往常一样启动它,对于 HC 及更高版本,使用executeOnExecutor()如果你不喜欢新的行为(我想没有人喜欢)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASyncTasks 阻塞其他任务 的相关文章

  • 在Android中使用RxJava2插入SQLiteDatabase

    我在学习RxJava2在安卓中 谁能解释一下我们如何使用将数据插入 SQLiteDatabaseRxJava2 这是我尝试使用的代码示例 但它将数据插入数据库六次 单击时 getCompletableObservable subscribe
  • Android Studio Beta 频道、Android Studio Canary 频道、Android Studio Dev 频道有什么区别? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我是 android 新手 想知道要安装哪个 studio Android Studio Beta 频道 Android Studio Ca
  • 使用 setText 更改文本后如何更新屏幕?

    现在我正在使用以下代码来更新TextView txtMain setText new text 该代码执行后 屏幕不会更新新文本 有没有办法可以强制文本立即更新 该代码执行后 屏幕不会更新新文本 一旦您将控制权归还给 Android 就应该
  • 通过意图使用多个电话号码添加新联系人

    我想使用添加新联系人ContactsContract Intents Insert 但问题是我不知道可以有多少个电话号码 据我了解 我只能使用三个电话号码PHONE SECONDARY PHONE TERTIARY PHONE常数 有什么办
  • Auto-value-gson出现接口错误,注册一个InstanceCreator?

    我有一个如下所示的接口类 public interface Species String name And a Human实现的类 AutoValue使用类型适配器 AutoValue public abstract class Human
  • Google 地图位于活动的中间区域

    我正在使用 Android studio 2 1 2 我检查了一下 大多数问题要么使用旧版本的 Android studio 要么使用一些旧的类 这些类不适用于我的情况 从文件 gt 新项目 gt 我使用了选项Google Maps Act
  • SQLite FTS4 使用特殊字符进行搜索

    我有一个 Android 应用程序 它使用 FTS4 虚拟表在 SQLite 数据库中搜索数据 它工作正常 但是当表中的数据包含特殊字符 如 或 时 SQLite MATCH 函数不会给出任何结果 我现在迷路了 谢谢 注意 默认的分词器真的
  • 更新到 Kotlin 1.3.30 后出现“未解析的引用:Parcelize”

    我使用 Kotlin 1 3 21 很长时间了kotlin android extensions插件长期处于实验模式 今天我通过升级版本切换到 Kotlin 1 3 30 现在无论我使用什么 Parcelize注释我看到错误 Unresol
  • Cordova + android:无法从应用程序打开拨号盘或邮件意图

    我有一个奇怪的问题 我无法从应用程序中打开带有预定义号码或邮件意图的拨号盘 我正在使用 netbeans 8 0 1 创建 cordova 应用程序 我的 Cordova 版本是 4 0 0 我按照步骤创建了一个应用程序 并选择了 Hell
  • TextView 宽度匹配drawableTop 宽度

    有什么办法可以使TextView width匹配复合可绘制宽度 XML 例如对于 xml 代码
  • 在 android studio 中找不到 SDK 位置

    我刚刚在 android studio 中导入了我的 eclipse 项目 我一直这么说 Error SDK location not found Define location with sdk dir in the local prop
  • 如何将设备屏幕位置转换为发送事件位置?

    我知道关于input tap x yshell 命令 但是 我想了解如何 使用执行单击sendevent命令 我能够通过以下命令实现它 sendevent dev input event5 3 53 X sendevent dev inpu
  • Android NDK 支持区域设置吗?

    我真正想做的就是使用格式化日期strftime x 以正确的顺序 在大多数平台上调用setlocale 足够 在 Android 上 我不断收到 美国日期 那么 Android 不支持语言环境吗 No setlocale and strft
  • react-native android fontFamily 不生效

    问题一 我在index android js的欢迎样式中添加了fontFamily 但没有效果 fontFamily 真的可以在 Android 上使用吗 欢迎 字体大小 20 fontFamily roboto thin 文本对齐 居中
  • Android:如何创建模态进度“轮”叠加层?

    我想在我的视图上显示模式进度 轮子 叠加层 ProgressDialog 很接近 但我不想要对话框背景或边框 我尝试设置对话框窗口的背景可绘制 this progressDialog new ProgressDialog Main this
  • 张量流和线程

    下面是来自 Tensorflow 网站的简单 mnist 教程 即单层 softmax 我尝试通过多线程训练步骤对其进行扩展 from tensorflow examples tutorials mnist import input dat
  • 找不到数据库路径是不可能的

    我对 android 开发很陌生 现在我正在尝试通过扩展 SQLiteOpenHelper 的类创建数据库 我确信数据存储在我的 Nexus 7 我用来测试应用程序的设备 上的某个位置 但是我找不到数据库的路径 我四处寻找其他类似的问题 所
  • 如何解决 greenDAO 在执行 InsertOrReplace 时“不存在这样的表错误”?

    我正在使用 greenDAO 并且已成功生成所有必需的类和实体 并且我可以看到我的表已创建 但是在要替换的行上放置断点后 我收到一条错误消息 告诉我 不存在这样的表错误 try appTimeUsageDao insertOrReplace
  • 在线性布局内的 ScrollView 内并排对齐 TextView

    我有一个带有滚动视图的线性布局 我想保留它的当前格式 但只需将 textView2a 和 textView3a 并排放置 而不会破坏我当前的布局格式 我已经包含了我最近的尝试 但它们似乎不正确 提前致谢 Java菜鸟 当前有效的 XML
  • 使我的 COM 程序集调用异步

    我刚刚 赢得 了在当前工作中维护用 C 编码的遗留库的特权 这个dll 公开使用 Uniface 构建的大型遗留系统的方法 除了调用 COM 对象之外别无选择 充当此遗留系统与另一个系统的 API 之间的链接 在某些情况下 使用 WinFo

随机推荐

  • 在生产模式下写入全局变量有什么问题?

    我看了一下连接mongodb的示例代码 看到了一句看不懂的内容 为什么在开发的情况下使用全局变量是安全的 又为何没有投入生产 您不需要理解代码 请只看评论部分 import MongoClient from mongodb let clie
  • 为什么主要编译器对 stdint.h 使用 typedef 而对 stdbool.h 使用 #define?

    我刚刚注意到 gcc 和 clang 似乎都对 stdint h 使用 typedef 但对 stdbool h 使用 define 例子 clang 的 stdint h https clang llvm org doxygen stdi
  • 应用程序中有多少个并发线程才算是很多?

    5 100 1000 我想 这取决于 但是取决于什么呢 作为服务器守护进程 服务运行的应用程序有什么常见之处 什么是硬限制 鉴于机器可以处理总体工作负载 我如何确定开销在多少个线程时开始对性能产生影响 操作系统之间的重要区别是什么 还应该考
  • 从 Windows 任务列表返回命令行

    我正在寻找一个命令来获取在 Windows 任务管理器中写入的命令行 我正在使用tasklist fo CSV v但它不提供我查看任务管理器时得到的命令行 我附上一张图片来说明我的意思 它是最右边的一列 我在系统调用中需要这些信息r 只是为
  • 如何在eclipse中配置ADT插件

    开发者网站上有以下说明 配置 ADT 插件 一旦 Eclipse 重新启动 您必须指定 Android SDK 目录的位置 在出现的 欢迎使用Android开发 窗口中 选择 使用现有的SDK 浏览并选择您最近下载并解压的 Android
  • 限制多处理python中的进程数量

    我的要求是生成hundreds of HTTP POST requests per second 我正在使用它urllib2 def send req urllib2 Request url req add data data respon
  • 尝试添加已经有父级错误的 SKNode

    我在尝试运行我的游戏时收到错误 尝试添加已有父节点的 SKNode 如果我将 SKSpriteNode 在本地添加到函数中 它就可以正常运行 但是当我尝试在全球范围内声明它时 我收到了该错误 任何解决此错误的帮助都会很棒 我认为这与self
  • 对具有不同服务参数的多个实体使用相同的实体侦听器

    由于 EntityListener 注册为服务 是否可以使用不同的参数多次注册同一个类 并将它们每个与特定的实体相关联 考虑以下实体 Class EntityA ORM Entity ORM EntityListeners myBundle
  • 某些团队服务菜单项上的星号是什么?

    当我在浏览器中访问我的 Team Services 帐户时 某些菜单项的名称末尾有一个星号 在此图中 您可以看到其中的 2 个示例 Wiki 和 工作项 那个星号是什么意思 这是一个预览功能 您可以从预览功能菜单中打开 关闭 更多信息 使用
  • 如何将 Jira 问题收集器与 Angular 应用程序集成?

    我正在创建一个 Angular 7 应用程序 它利用 Jira 问题收集器将问题直接提交到各自的项目 当我按照现在的方式构建应用程序时 什么也没有发生 当我直接将代码从方法 submitIssue 移动到 ngOnInIt 下时 会出现问题
  • Scala:对象初始值设定项中的并行集合导致程序挂起

    我刚刚注意到一种令人不安的行为 假设我有一个由单个对象组成的独立程序 object ParCollectionInInitializerTest def doSomething println Doing something for i l
  • WPF 应用程序在 vs2k8 中构建,但不在命令行上使用 msbuild

    我有一个相当小的解决方案 其中包含 WPF Windows 应用程序 当从解决方案构建时 它构建得非常好 我最近将解决方案中包含的项目集成到使用 MSBuild 的现有的 更大的命令行构建中 但是 当从命令行构建时 我收到以下错误 Main
  • HTML5 本地存储中的项目何时过期?

    数据保存多长时间localStorage 作为 HTML5 中 DOM 存储的一部分 可用吗 我可以为本地存储的数据设置过期时间吗 我建议将时间戳存储在object您存储在 localStorage 中 var object value v
  • 如何在Android Studio中导入java包

    我是 android 新手 我想将 jfftpack 导入到 android studio 中的项目中 但我不知道如何导入它 原始代码是 import ca uol aig realdoublefft 我不知道将 java 文件放在哪里 我
  • 将球体 a 旋转到自身的 b 点

    我试图弄清楚如何将球体从 A 点旋转到 B 点 我找到了一些Unity3d代码 Quaternion rot Quaternion FromToRotation pointA pointB sphere transform rotation
  • 如何搜索浏览器窗口对象以查找哪个对象或变量具有搜索值?

    如果我知道我有一个值 JohnSmith 存储在浏览器全局空间中的某个对象中 并且我遇到了某个断点 我如何知道哪个对象或变量的值为 JohnSmith 我有数百个对象 我不想在开发工具中手动搜索它 我在控制台或代码片段中使用了一些脚本来遍历
  • 如何在 AngularJS 和 HTML 中制作滴答作响的时钟(时间)

    我是一名 AngularJS html 初学者用户 一直在尝试寻找代码片段来为网络应用程序制作时钟 时间项目 网络搜索并没有像我期望的那样容易地提供直接的结果 所以我想我应该发布这个问题来获得一些答案 也让其他人更容易找到这个问题 我已经发
  • 循环遍历 NSAttributedString 属性以增加字体大小

    我需要的只是循环遍历所有属性NSAttributedString并增加字体大小 到目前为止 我已成功循环并操作属性 但无法保存回NSAttributedString 我注释掉的行对我不起作用 怎么救回来 NSAttributedString
  • 发布到 Azure 失败,出现“无法识别的链接扩展‘contentLibExtension’”错误

    我正在尝试使用 Visual Studio 2015 CTP 将 ASP NET MVC 6 应用程序发布到 Azure 并收到以下错误 Publishing with publish method MSDeploy Calling msd
  • ASyncTasks 阻塞其他任务

    我有 2 个 ASyncTasks 一个从 httpPost 检索值 另一个更新 UI 的一些元素 包括列表视图 问题是 由于两个 ASyncTasks 共享相同的后台线程 如果网络操作首先启动并且运行缓慢 由于网络连接不良 其他后台线程花