Android -- 每日一问:在项目中使用AsyncTask会有什么问题吗?

news2024/7/31 5:24:22

在这里插入图片描述

经典回答

那我们考查 AsyncTask 会问些什么呢?得先问问会不会用吧,看看知不知道有 onProgressUpdate 方法。

其次问一下是怎么理解 AsyncTask 的机制,有没有看过它的源代码?

这个问题主要看对方是否对 Android 的东西有好奇心,会主动去看 AsyncTask 的源码,或者能大体地讲清楚 AsyncTask 的原理。一般有好奇心的同学都比较善长学习,善长学习的人都能比较快融入团队。

AnsycTask 执行任务时,内部会创建一个进程作用域的线程池来管理要运行的任务,也就就是说当你调用了 AsyncTask.execute() 后,AsyncTask 会把任务交给线程池,由线程池来管理创建 Thread 和运行 Therad 。最后和 UI 打交道就交给 Handler 去处理了。

线程池可以同时执行多少个 TASK?

Android 3.0 之前(1.6之前的版本不再关注)规定线程池的核心线程数为5个(corePoolSize),线程池总大小为 128(maximumPoolSize),还有一个缓冲队列(sWorkQueue,缓冲队列可以放10个任务),当我们尝试去添加第139个任务时,程序就会崩溃。当线程池中的数量大于 corePoolSize,缓冲队列已满,并且线程池中的数量小于 maximumPoolSize,将会创建新的线程来处理被添加的任务。如下图会出现第16个Task比第6-15个Task先执行的情况。
image.png

多个AsyncTask任务是串行还是并行?

从Android 1.6到2.3(Gingerbread) AsyncTask是并行的,即上面我们提到的有5个核心线程的线程池(ThreadPoolExecutor)负责调度任务。从Android 3.0开始,Android团队又把AsyncTask改成了串行,默认的Executor被指定为SERIAL_EXECUTOR。

    /**
     * An {@link Executor} that executes tasks one at a time in serial
     * order.  This serialization is global to a particular process.
     */
    public static final Executor SERIAL_EXECUTOR = new SerialExecutor();

从它的说明也可以看出是串行的。如需要并行,可以通过设置executeOnExecutor(Executor)来实现多个AsyncTask并行。

    public final AsyncTask<Params, Progress, Result> executeOnExecutor(Executor exec,
            Params... params) {

AsyncTask容易引发的Activity内存泄露

如果AsyncTask被声明为Activity的非静态的内部类,那么AsyncTask会保留一个对创建了AsyncTask的Activity的引用。如果Activity已经被销毁,AsyncTask的后台线程还在执行,它将继续在内存里保留这个引用,导致Activity无法被回收,引起内存泄露。

当然,最后少不了问一句:“你在项目中,会用什么方案来替换AsyncTask呢?”

不过,学习它对理解Android的机制和线程池的使用还是很的意义的,所以强烈建议大家读一下它的源码。

你的朋友是不是也在准备面试呢?你可以把今天的题目分享给好友,或许你可以帮到他。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/102706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

夜天之书 #69 企业开源该选什么软件许可证?

开源软件和自由软件的概念与其许可证紧密绑定。通常&#xff0c;开源软件被定义为使用 OSI 认可的&#xff0c;即符合开源定义[1]的许可证来分发的软件&#xff0c;而自由软件被定义成使用 GPL 或说 Copyleft 式许可证分发的软件。尽管今天人们最关心的可能是软件的生产过程即如…

通过展开序列ISTA(SISTA)算法创建的递归神经网络(RNN)(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 递归神经网络&#xff08;recursive neural network&#xff09;是具有树状阶层结构且网络节点按其连接顺序对输入信息进行递归…

element表格去除border边框同时有竖直方向的边框

为什么要去除boder边框&#xff0c;原因是boder的边框与页面的背景色相同&#xff0c;然后显得表格内凹了一个像素 要实现的需求是表格去除border边框同时添加竖直方向的边框 但是如果不添加boder属性&#xff0c;表格则没有竖直方向的边框 这种下无内凹&#xff0c;但是显得…

ICV:上半年全球市场规模达20.4亿美元,超声波雷达仍具有竞争力!

全球前沿科技咨询机构ICV近期发布了全球车载超声波雷达的市场分析报告。ICV在报告中指出&#xff0c;在当前的自动驾驶发展阶段&#xff0c;超声波雷达在一众传感器中仍具有较强竞争力&#xff0c;其中APA类型超声波雷达的渗透率上升空间很大。2022年上半年中国的超声波雷达市场…

kettle - get请求

文章目录前言kettle - get请求前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&#xff0c;那欢迎常来啊!!! kettle - get请…

学Python爬虫好找工作吗?要学到什么程度?

Python的火爆&#xff0c;同时也带动了Python爬虫岗位的的极大需求。可能有些人想问了&#xff0c;学Python爬虫真的好找工作吗&#xff1f;要学到什么程度&#xff1f;根据各大招聘网站的数据反馈&#xff0c;目前市场上对Python爬虫工程师的需求比较大。但是这并不意味着学习…

【Redis技术专题】「高可用技术基础」一同分析一下Redis高可用的“基石”之主从架构的本质原理解析

&#x1f4d5;技术箴言 当心中有更高的山峰去攀登&#xff0c;就不会在意脚下的泥沼。 &#x1f4d5;前提概要 Redis高可用的方案包括&#xff1a;持久化、主从复制&#xff08;及读写分离&#xff09;、哨兵和集群&#xff08;Cluster&#xff09;。 &#x1f4d5;&#x1f…

分布式注册服务中心etcd在云原生引擎中的实践

作者&#xff1a;王雷 etcd是什么 etcd是云原生架构中重要的基础组件&#xff0c;由CNCF孵化托管。ETCD是用于共享配置和服务发现的分布式&#xff0c;一致性的KV存储系统&#xff0c;是CoreOS公司发起的一个开源项目&#xff0c;授权协议为Apache。etcd 基于Go语言实现&…

vivo 推荐业务 x DeepRec:全链路优化实践

作者&#xff1a; vivo - 人工智能推荐团队&#xff1a;何鑫、李恒、周健、黄金宝 背景 vivo 人工智能推荐算法团队在深耕业务同时&#xff0c;也在积极探索适用于搜索/广告/推荐大规模性稀疏性算法训练框架。分别探索了 tensornet/XDL/tfra 等框架及组件&#xff0c;这些框…

docker高级篇第二章-分布式存储之实战案例:主从容错切换迁移案例

在上一篇&#xff0c;学会了3主3从的Redis集群搭建。那么接下来&#xff0c;我们就来学习Redis集群主从容错切换迁移案例 本次案例从模拟两个场景 1&#xff1a;数据读写存储 a&#xff1a;一个新key数据来了&#xff0c;是否会按照预设的进入槽中&#xff1f;集群是否生效 …

黄病毒蛋白酶底物,113866-14-1,Boc-GRR-AMC

Boc-GRR-AMC被拟南芥的II型半胱氨酸蛋白酶Atmc4和Atmc9切割。Boc GRR AMC的储备溶液最好在DMSO中制备。 A substrate for flavivirus proteases such as West Nile virus protease, yellow fever virus NS3 protease, and dengue virus NS2B-NS3 protease.Boc-GRR-AMC is cleav…

JSP ssh排放登记管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh 排放登记管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0…

抗疫逆行者网页作业 感动人物HTML网页代码成品 网页作业带JS下拉菜单 最美逆行者网页模板 致敬疫情感动人物网页设计制作

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

洛谷P1319 压缩技术

压缩技术 题目描述 设某汉字由 NNN \times NNN 的 0\texttt 00 和 1\texttt 11 的点阵图案组成。 我们依照以下规则生成压缩码。连续一组数值&#xff1a;从汉字点阵图案的第一行第一个符号开始计算&#xff0c;按书写顺序从左到右&#xff0c;由上至下。第一个数表示连续有…

使用go语言开发自动化脚本 - 一键定场、抢购、预约、捡漏

原文地址&#xff1a;码农在新加坡的个人博客 背景 不知道大家有没有这种经历&#xff0c;想要抢课&#xff0c;定场&#xff0c;发现抢不到&#xff0c;想要捡漏&#xff0c;又要随时刷&#xff0c;今天我就来讲一下我是怎么使用Go语言开发自动化脚本来解决定场&#xff0c;抢…

圆梦腾讯之路6面阿里、5面字节、4面腾讯,终斩腾讯Offer

6年前&#xff0c;BAT冲到了风口浪尖&#xff0c;美国上市的阿里成为中国体量最大的互联网公司&#xff0c;腾讯借助微信成为移动互联网的霸主&#xff0c;外企开始撤离中国&#xff0c;国企的光环也慢慢褪去。 到了近年&#xff0c;应届毕业生心中最炙手可热的公司换成了TMD及…

数据结构刷题训练营3

开启蓝桥杯备战计划&#xff0c;每日练习算法一题&#xff01;&#xff01;坚持下去&#xff0c;想必下一年的蓝桥杯将会有你&#xff01;&#xff01;笔者是在力扣上面进行的刷题&#xff01;&#xff01;由于是第一次刷题&#xff01;找到的题目也不咋样&#xff01;所以&…

[附源码]计算机毕业设计Python工程施工多层级管理架构(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

逃离美国,跨越8000公里远程办公,他开发了世界上最强的虚拟机

“从前”有一门编程语言叫Smalltalk&#xff0c;它是世界上第一个纯粹的面向对象编程语言。 Smalltalk有很多忠实拥趸&#xff0c;在Java崛起之前&#xff0c;它独自可以抗衡C。 著名的《设计模式》一书&#xff0c;其中的代码示例就是C和Smalltalk。 但是Smalltalk运行速度太慢…

缓存架构,减少不必要的计算

前言&#xff1a; 互联网应用的主要挑战就是在高并发情况下&#xff0c;大量的用户请求到达应用系统服务器&#xff0c;造成巨大的计算压力。互联网应用的核心解决思路就是采用分布式架构&#xff0c;提供更多的服务器&#xff0c;从而提供更多的计算的资源&#xff0c;应对高…