用于网络请求的 AsyncTask 与 ThreadPoolExecutor

2024-01-10

我正在开发一个项目,我需要点击 Web 服务下载 JSON 数据并将其表示在列表中。所有列表项都有缩略图 URL,可以下载并显示在列表项中。

我已经使用 ThreadPoolExecutor 和 AsyncTask 完成了整个调用部分。

但从设计的角度来看,这是一个更好的选择:
1. 线程池执行器
2. 异步任务

很少的副词。 ThreadPoolExecutor的:
1. 用户可以定义编号。可以执行的并发线程数。
2. 一次性取消所有请求。

很少的副词。异步任务的:
1.它内部使用ThreadPoolExecutor,但是我们不能定义no。同时运行的线程数。
2. 取消单个请求很容易。
3. 能够附加和分离任务。
4. 从 doInBackground 更新 UI 很简单。

我知道 AsyncTask 的更多优点,但是对于简单的应用程序来说,例如从 Web 服务获取数据,然后再获取图像。

AsyncTask 或 ThreadPoolExecutor 哪个更合适?如果您能提供一些有关您选择的理由,那将会很有帮助。

我在这里读过一些关于 SO 的文章,但没有一篇文章对两者进行比较。如果我错过了任何内容,抱歉给您带来麻烦,请给我发布相同内容的链接。

提前致谢。


我认为如果您想使用一系列“级联调用”加载缩略图,AsyncTask 很有用:在 onPostExecute 中,您可以启动下一个 AsyncTask 来下载下一个缩略图。

但如果你想提高效率,我建议使用ThreadPoolExecutor。这是一句来自开发者.android.com http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html:

线程池解决两个不同的问题:通常提供 提高性能当执行大量异步操作时 任务,由于减少了每个任务的调用开销,并且他们提供了 限制和管理资源的方法,包括线程, 执行任务集合时消耗。每个ThreadPoolExecutor 还维护一些基本统计数据,例如完成的数量 任务。

总之,ThreadPoolExecutor 可能是为像您这样的情况而设计的;因此,我向您推荐这门课。

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

用于网络请求的 AsyncTask 与 ThreadPoolExecutor 的相关文章

  • 使用 HttpClient 时,为什么服务器响应中省略了 Content-Length 标头?

    我正在使用这个问题的源代码如何异步执行httprequest并显示下载响应的进度 https stackoverflow com questions 9594318 how to asynchronous perform a httpreq
  • 如何在android中压缩和解压png图像

    您好 在我的应用程序中 当我单击 zip 按钮时 我需要压缩图像文件 当我单击解压缩按钮时 我需要解压缩文件 我尝试使用下面的代码来压缩图像 但我的问题是当我单击 zip 按钮时 正在创建 zip 文件 但之后在使用 winzip 软件的系
  • 导入已经创建的sqlite数据库(xamarin)

    我正在使用 Xamarin 想知道如何导入我已经创建的 sqlite 数据库 到目前为止 我已将其添加到资产文件夹中 但不知道下一步从哪里开始 string localPath Path Combine System Environment
  • 如何在 android 中启动“添加联系人”活动

    您能告诉我如何在 Android 中启动 添加联系人 活动吗 谢谢 API 级别 5 及以上解决方案 Add listener so your activity gets called back upon completion of act
  • Android 中的 Sugar ORM:更新 SQLite 中保存的对象

    我是在 Android 上使用 SQLite 和 Sugar ORM 进行应用程序开发的新手 并尝试阅读 Sugar ORM 文档 但没有找到有关如何更新 SQLite 中保存的对象的任何信息 更改对象属性后还可以保存对象吗 就像是 Cus
  • API29 上不推荐使用 setColorFilter

    我使用以下行来更改 VectorDrawable 的颜色 mydrawable getBackground setColorFilter color PorterDuff Mode SRC ATOP 这很好用 尽管它现在已被弃用 文档建议我
  • 如何访问android库项目中的资源

    我正在构建一个 android 库项目 它内部需要一些静态资源 图像 xml 等 然后我想知道我可以把这些资源放在哪里以及如何访问它们 既然我把资源放到了assets文件夹 我使用 AssetManager 来访问资源 public cla
  • Android:我可以创建一个不是矩形的视图/画布吗?圆形的?

    我有一个圆形视图 悬停在主要内容上方 gt 从屏幕出来的 z 轴方向 当有人点击屏幕时 我希望选择主要内容或悬停在上方的视图 当它覆盖主视图时 到目前为止效果很好 我在透明画布上有一个圆形物品 这意味着您可以看到该圆圈之外的背景的所有内容
  • 来自 iPhone/iPad 的 json Web 服务

    有人可以帮助我解决如何从 iphone 或 ipad 使用 json Web 服务的问题吗 这里我的要求是使用 API 密钥实现 json webservice 如果可能的话发布一些教程或示例链接 谢谢 规范的 JSON 处理库是here
  • TextInputLayout 对于在 EditText 中以编程方式给出提示没有效果

    我有一个 EditText 它的父级是 TextInputLayout 我试图以编程方式为 EditText 提供提示 不在布局中 在这种情况下 文本输入提示动画不起作用 它像简单的 EditText 一样工作 有人可以建议如何处理它吗 下
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 屏幕开/关检测

    在这里 我试图确定屏幕是否打开 但按下电源锁定 解锁按钮时它似乎不起作用 应用程序运行没有错误 但 if else 中的代码似乎没有效果 Edited现在代码可以工作了 谢谢Olgun 但媒体播放器播放不会停止 并且每次在屏幕上 离屏时都会
  • 是否可以使用 CardView 为浮动操作按钮制作阴影?

    I know CardView不是为此而设计的 但理论上如果cardCornerRadius view size 2它应该导致圆圈 我错过了什么吗 绘制真实的动画阴影并不困难 您可以尝试在 Froyo 等任何 Android 设备上实现 L
  • Activity 类型中的方法 showDialog(int) 在 Android 中已被弃用?

    方法showDialog int 从类型Activity is 已弃用 什么原因 以及如何解决 什么原因 http developer android com reference android app Activity html show
  • 使用 asp.net 发送 20,000 多封电子邮件

    我正在编写一个应用程序 需要向从我们的数据库中选择的学生发送大量电子邮件 每封电子邮件都将进行个性化 包括他们的姓名 学习课程等 因此需要一次发送一个 我可以在 SmtpClient 上循环执行此操作 但我担心我尝试发送的数字最终会遇到超时
  • Android Gradle 同步失败:无法解析配置“:classpath”的所有工件

    错误如下 Caused by org gradle api internal artifacts ivyservice DefaultLenientConfiguration ArtifactResolveException Could n
  • 在 Android 手机中通过耳机插孔发送数据

    我目前正在处理一个新项目 我必须通过具有特定电压的耳机插孔发送数据 然后我可以在该电压上工作 所以这里我需要根据我的数据来编程具体电压 我是否可以在android中访问耳机的输出电压 然后创建一个应用程序来控制该电压 这是一篇讨论此问题的
  • 使用Intent拨打电话需要权限吗?

    在我的一个应用程序中 我使用以下代码来拨打电话 Intent intent new Intent Intent ACTION CALL Uri parse startActivity intent 文档说我确实需要以下清单许可才能这样做
  • Fragment 生命周期和在不存在的 Fragment 上调用 onCreate 的问题

    我正在 Android 中测试片段 并且片段生命周期有一些令人困惑的行为 我有一个活动 在横向和纵向模式下使用 xml 布局 我有一些代码可以访问在片段布局之一中定义的 EditText 对象 如果我以横向模式启动应用程序 一切都会正常 我
  • 我应该如何在 Android 上使用 Retrofit 处理“无互联网连接”

    我想处理没有互联网连接的情况 通常我会运行 ConnectivityManager cm ConnectivityManager context getSystemService Context CONNECTIVITY SERVICE N

随机推荐

  • iOS UTF-8 标签字符串

    我有一个 UTF 8 编码字符串 我想在标签中显示它 当我设置断点并检查保存字符串的变量时 一切看起来都很好 但是 当我尝试输出到日志或标签时 我得到拉丁编码 我已经尝试了几乎所有关于 SO 及其他的建议 但我就是无法让字符串正确显示 这是
  • 视图左上角的 GMSMarker 图标 (iOS)

    我正在尝试创建一个包含 GMSMapView 的 UITableViewCell 其中 GMSMarker 位于当前位置的中心 问题是标记总是出现在当前位置的左上角 我不知道如何解决这个问题 我尝试按照以下步骤操作 使用 UItablevi
  • 什么是 { 得到;放; C# 中的语法?

    我正在学习 ASP NET MVC 我可以阅读英文文档 但我不太明白这段代码中发生了什么 public class Genre public string Name get set 这是什么意思 get set 它是所谓的 auto 属性
  • 更改 NSDictionary 中的键名

    我有一个方法 它返回一个带有某些键和值的 nsdictionary 我需要将字典中的键名称更改为新的键名称 但该键的值需要相同 但我被困在这里 需要帮助 此方法仅适用于可变字典 如果新密钥已经存在 它不会检查应该做什么 您可以通过调用 mu
  • 在 Visual C# 中从 RichTextBox 中删除 RichText 格式

    我正在用 C 开发一个高级富文本编辑器 但偶然发现了一个我似乎无法理解的问题 我一直试图让用户将他们的文档保存为文本文件 纯文本 通过使用以下内容 我的 RichTextBox Save 文件 文件路径 PlainText 但问题是 当他们
  • 1.8 与 1.9 中的 BigDecimal

    升级到 ruby 1 9 时 在比较预期值与实际值时 我的测试失败了BigDecimal这是 Float 除法的结果 expected 0 495E0 9 18 got 0 4950000000 0000005E0 18 27 谷歌搜索 b
  • CSS 第一次在 3D 变换时不渲染背面

    我有一个卡片翻转风格的动画 可以将文本区域翻转 180 度 我遇到的唯一问题是 第一次执行翻转时 在经过 90 度后 元素消失 然后在完成 180 度旋转后出现后面的元素 这是带有代码的示例 http jsfiddle net elninj
  • 阻止用户删除 BigQuery 表

    我们正在尝试创建一个非常基本的角色 允许用户查询 BigQuery 表 但不能删除它们 我们正在试验的自定义角色现在具有以下权限 bigquery jobs create bigquery jobs get bigquery jobs li
  • 如何清除 Selectize.js 下拉列表中的选定值?

    我有一个selectize js https selectize github io selectize js 下拉菜单 我必须清除所选值 我已经尝试过这个 如建议的另一个问题 https stackoverflow com questio
  • Nexus 10 Camera.release 挂起 30 秒

    我们是一群正在开发 Android 实时视频处理应用程序的开发人员 最近 一位客户报告我们的应用程序出现冻结 这种情况仅发生在 Nexus 10 设备上 我们自己购买了设备并进行了测试 设备预装了 Android 4 2 我们的应用程序没有
  • 如何将带有 alpha 的 PNG 转换为 RGBA4444 以便在 SpriteKit SKTexture 中使用?

    我有一堆透明 PNG 我想在SKSpriteNode动画与SKTextures 我需要调整内存使用情况SKTextures 通过降低纹理质量RGBA8888 to RGBA4444 我将如何初始化SKTexture with RGBA444
  • 带有子类的构造函数中的 Object.freeze

    如果我希望我的类不可变 我知道我可以使用Object freeze 现在 如果我希望我的对象在构造后不可变 我会放Object freeze this 作为最后一行进入我的构造函数 但现在 如果我想子类化它 我无法添加更多参数 因为我无法调
  • 在 React.js 中检索复选框的值

    我想在选中复选框时检索它的值 我正在使用这个 http react component github io checkbox http react component github io checkbox 我的代码看起来像这样 div ch
  • 如何设置密码最小长度

    我目前正在制作 html 表单 如何将密码的最小长度设置为8 以便拒绝用户输入小于8的密码 如何做到这一点 这是代码 div div
  • 使用 mvcmailer 发送多封电子邮件

    我想使用MVC邮件程序 https github com smsohan MvcMailer wiki MvcMailer Step by Step Guide使用 asp net mvc 3 和 razor 发送电子邮件 还提到过Scot
  • 如何在 postgresql 中将 DELETE 的返回插入到 INSERT 中?

    我正在尝试从一个表中删除一行并将其与一些附加数据插入到另一个表中 我知道这可以通过两个单独的命令来完成 一个用于删除 另一个用于插入新表 然而我试图将它们结合起来但它不起作用 这是我到目前为止的查询 insert into b one tw
  • Django - 基于函数的视图 (FBV) 不允许使用方法

    我得到了405 METHOD NOT ALLOWED当我尝试通过 AJAX 调用提交 POST 请求时的响应 POST events profile update HTTP 1 1 405 0 我试图用最基本的视图来设置它 def prof
  • 重写抽象类以返回硬编码方法值

    我想从这里覆盖 CoreUtils 抽象类https docs spring io spring framework docs current javadoc api org springframework web cors reactiv
  • Laravel 路由重定向而不关闭路由缓存

    我的电脑上有这个代码routes php执行重定向的文件 虽然问题是每当我跑步时php artisan route cache命令 它给了我一个错误Unable to prepare route article params for ser
  • 用于网络请求的 AsyncTask 与 ThreadPoolExecutor

    我正在开发一个项目 我需要点击 Web 服务下载 JSON 数据并将其表示在列表中 所有列表项都有缩略图 URL 可以下载并显示在列表项中 我已经使用 ThreadPoolExecutor 和 AsyncTask 完成了整个调用部分 但从设