Android面试常见问题总结

2023-10-29

1、AsyncTask是什么? 有什么缺陷?
AsyncTask是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新UI。多个AsyncTask对象是串行执行的。Android 1.5刚开始引入AsyncTask的时候,execute方法确实是串行执行的,类定义里面只有SERIAL_EXECUTOR线程池;到1.6版本时,改用并行线程池THREAD_POOL_EXECUTOR,再到3.0版本至今,就成了上面说的模样————定义两个线程池,但是默认用串行池。
缺陷:1)生命周期,当activity销毁时,AsynTask会一直执行,直到doInBackground()方法执行完毕,持有activity的引用,造成 内存泄漏
解决方案:第一,在Activity生命周期结束前,去cancel AsyncTask
第二,如果一定要写成内部类的形式,对context采用WeakRefrence,在使用之前判断是否为空。

2、HandlerThread原理
当系统中有多个耗时任务需要执行时,每个任务都会开启新的线程去执行耗时任务,这样会造成系统多次创建和销毁线程,影响系统性能。为了解决这个问题,google提出了HandlerThread,它本质是一个线程类,继承于Thread。
HandlerThread有自己的内部Looper对象,可以进行loopr循环。通过获取HandlerThread的looper对象传递给Handler对象,可以在handleMessage()方法中执行异步任务。创建HandlerThread后必须先调用HandlerThread.start()方法,Thread会先调用run方法,创建Looper对象。当有耗时任务进入队列时,则不需要开启新线程,在原有的线程中执行耗时任务即可,否则线程阻塞。它在Android中的一个具体的使⽤场景是IntentService。
2)HanlderThread的优缺点
HandlerThread优点是异步不会堵塞,减少系统创建线程和销毁线程对性能的消耗。
HandlerThread缺点是不能同时继续进行多任务处理,要等待进行处理,处理效率较低。 HandlerThread与线程池不同,HandlerThread是一个串队列,背后只有一个线程。
3)怎样使⽤HandlerThread?
a. 创建HandlerThread的实例对象 HandlerThread handlerThread = newHandlerThread(“myHandlerThread”); 该参数表示线程的名字,可以随便选择。
b. 启动我们创建的HandlerThread线程 handlerThread.start();
c. 将handlerThread与Handler绑定在一起。即将线程的looper与Handler绑定在一起,在handleMessage()中处理任务。

3、IntentService
IntentService是一种特殊的Service,它继承了Service并且它是一个抽象类,因此必须创建它的子类才能使用IntentService
原理
在实现上,IntentService封装了HandlerThread和Handler。当IntentService被第一次启动时,它的onCreate()方法会被调用,onCreat()方法会创建一个HandlerThread,
然后使用它的Looper来构造一个Handler对象mServiceHandler,这样通过mServiceHandler发送的消息最终都会在HandlerThread中执行。
生成一个默认的且与主线程互相独立的工作者线程来执行所有传送至onStartCommand()方法的Intetnt。
生成一个工作队列来传送Intent对象给onHandleIntent()方法,同一时
刻只传送一个Intent对象,这样一来,你就不必担心多线程的问题。在所有的请求(Intent)都被执行完以后会自动停止服务,
所以,你不需要自己去调用stopSelf()方法来停止。

4、Binder机制
Binder是Android系统进程间通信(IPC)方式之一。
Binder使用Cl

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

Android面试常见问题总结 的相关文章

随机推荐

  • 解决cURL error 60: SSL: no alternative certificate subject name matches target host name ‘test.com‘

    按照提示前往libcurl Error Codes说是SSL 证书问题 解决方法 1 前往该路径 下载https curl se ca cacert pem 将文件里的内容全部复制下来 然后替换上图路径的 ca bundle crt 里面的
  • 一文搞定Linux进程和线程(详细图解)

    Linux 进程和线程 本篇文章我们就深入理解一下 Linux 内核来理解 Linux 的基本概念之进程和线程 系统调用是操作系统本身的接口 它对于创建进程和线程 内存分配 共享文件和 I O 来说都很重要 我们将从各个版本的共性出发来进行
  • jenkins从gitlab拉取代码,进行构建

    1 在gitlab平台加入jenkins机器的公钥 2 在jenkins平台加入jenkins机器的私钥 3 在jenkins中新建任务 4 立即构建
  • 音频录制以及播放

    音频录制以及播放 象棋小子 1048272975 一般的音频应用中 往往需要支持音频的拾取输入以及音频的播放输出 LPC5411x具有I2S音频接口以及双通道PDM数字麦克风接口 其中数字麦克风接口支持芯片深度睡眠时的语音激活 非常适合于音
  • java8内部调用无法引用值的问题

    问题 Variable used in lambda expression should be final or effectively final 具体原因 这段代码试图将 20 赋给一个局部变量 它无法通过编译 但绝非编写错误 这实际上
  • linux中的struct timeval结构

    struct timeval long tv sec seconds long tv usec and microseconds 百万分之一秒 timeval结构的用于指定时间值 头文件 include
  • 自定义LayoutManager,仿微信朋友圈的九宫格效果

    前言 之前在项目中我有写过自定义控件九宫格是根据ViewGroup写的 功能已经实现了 但是后来我感觉如果以后性能提升的话 可能在缓存这块有要求 所以 我感觉还是改变使用自定义LayoutManager来写这个控件 后期就直接使用Recyc
  • 2023百度网盘免费扩容方法

    百度网盘是一款大众使用的网络云盘储存工具 但是每一位用户的网盘空间是有限制的 那么又不想花钱进行扩容该怎么办 方法一 首先打开手机桌面上的软件进入 在我的界面点击更多服务进入 然后在更多服务界面点击领无限空间进入 最后在弹出的窗口根据提示绑
  • ningx跨域的方案

    location home rewrite home 1 break proxy pass https 添加上述代码
  • 深度学习-全连接神经网络-训练过程-模型正则与超参数调优- [北邮鲁鹏]

    目录标题 神经网络中的超参数 学习率 超参数优化方法 网格搜索法 随机搜索法 超参数搜索策略 粗搜索 精搜索 超参数的标尺空间 神经网络中的超参数 超参数 网络结构 隐层神经元个数 网络层数 非线性单元选择等 优化相关 学习率 dorpou
  • 华为OD机试真题 Java 实现【微服务的集成测试】【2023Q1 100分】

    目录 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 1 输入 2 输出 一 题目描述 现在有n个容器服务 服务的启动可能有一定的依赖性 有些服务启动没有依赖 其次服务自身启动加载会消耗一些时间
  • pandas从时间序列中判断是一周的第几天或星期几

    把时间列标准化时间格式 df time slot1 pd to datetime df time slot1 输出这一天是周中的第几天 Monday 0 Sunday 6 df dayofweek df time slot1 dt dayo
  • 数据湖和数据仓库的区别?

    简介 数据湖这个概念和数据仓库这两个概念一直搞不清楚 之前感觉区别就是数据湖是数据仓库的父集 数据湖是个伪命题 平时生活中也用不到 然后今天听了我的一个师哥的讲解 然后简单总结下 常见的问题 1 数据湖和数据仓库的区别 相似点 都可以处理海
  • PyQt5最全81 信号与槽之为类添加多个参数可选的信号

    PyQt5最全81 信号与槽之为类添加多个参数可选的信号 from PyQt5 QtCore import class MultiSignal QObject 为类添加多个信号 signal1 pyqtSignal 无参数 signal2
  • h5 跳转小程序微信浏览器不显示跳转按钮

    问题 静态页面 h5 页面 跳转小程序 在微信内置浏览器里面没有显示出跳转按钮 但是在其他浏览器则正常显示 可能有以下一些原因 1 jweixin js 版本 引入 jweixin js 需要 1 6 0 版本 http res2 wx q
  • ALV DATA_CHANGE与DATA_CHANGE FINISHED的区别

    Alv grid OO ALV中有两个事件 Event data changed和ata changed finished 第一个事件在可编辑字段的数据发生变化时触发 可用来检查数据的输入正确性 第二个事件是当数据修改完成后触发 如果数据没
  • 飞猪平台用户行为分析—python

    文章目录 一 项目背景 1 1数据来源 1 2数据介绍 二 分析目的 三 分析思路 四 数据分析 3 1数据清洗 3 2用户分析 3 2 1用户维度 3 2 1 1浏览量pv 访客量uv 成交量分析 3 2 1 2留存分析 3 2 1 3用
  • 执行命令定义时出错_深入浅出SDC clock定义(下)

    前情提要 前面两次分别和大家一起学习了SDC的整体框架组成和clock定义的一部分内容 如果想要查看可以点击下方蓝色链接 从中可以看出 所有SDC构成中最基本的就是clock的定义 它作为所有SDC的基础 贯穿到几乎所有SDC指令当中 并且
  • 区块链学习笔记(3)--交易机制与双花

    比特币的交易机制 如何交易 一位所有者 A 利用他的私钥对前一次交易T1和下一位所有者 B 的地址签署一个随机散列的数字签名 A将此数据签名制作为交易单T2 并将交易单T2广播全网 电子 货币就发送给了下一位所有者 要点 1 交易发起者的私
  • Android面试常见问题总结

    1 AsyncTask是什么 有什么缺陷 AsyncTask是一种轻量级的异步任务类 它可以在线程池中执行后台任务 然后把执行的进度和最终结果传递给主线程并在主线程中更新UI 多个AsyncTask对象是串行执行的 Android 1 5刚