首页 > 其他分享 >面试官:我有一记 Framework 连环炮;看看你能撑到第几步?

面试官:我有一记 Framework 连环炮;看看你能撑到第几步?

时间:2023-10-07 15:04:31浏览次数:31  
标签:面试官 MessageQueue Framework Binder Handler 线程 Looper 连环 消息

面试官:我有一记 Framework 连环炮;看看你能撑到第几步?_服务器

近期在面试中遇到了很多关于Handler、Binder机制的问题,相信很多人在面试或晋升考核中也遇到了类似的问题。如果你对技术原理和底层逻辑没有深入了解,那么你通过面试的机会就会显著下降。

本文将介绍Handler、Binder机制的学习手册,解决大家对底层逻辑、技术原理、源码解析、面试真题等相关技术知识点了解不够透彻的问题。下面为大家展示一下关于Handler、Binder机制的相关面试真题实例。

问题1:Handler被设计出来的原因?有什么用?

Handler是Android消息机制的主要成员,它管理着所有与界面有关的消息事件。它的主要作用是切换线程,使得在子线程中无法访问UI的问题得到解决。常见的使用场景有跨进程之后的界面消息处理、网络交互后切换到主线程进行UI更新等。

问题2:Handler线程是如何切换的?

在回答这个问题时,需要简单介绍一下Looper和MessageQueue。Looper是线程的消息循环,它会不断地从MessageQueue中取出消息并执行。MessageQueue是消息队列,用于存储Handler发送的消息。

当线程A调用Looper.prepare()方法时,会初始化Looper并设置ThreadLocal中的Looper,同时初始化MessageQueue。当线程A调用Looper.loop()方法时,会通过myLooper获取线程A的Looper,进而获取MessageQueue并开始循环等待消息。

当线程B通过Handler发送消息时,消息会通过sendMessageAtTime()方法插入到MessageQueue中。当MessageQueue中有消息时,Looper会取出消息并执行callback。由于Looper是线程A的Looper,因此执行的Message或Handler的Callback都是在线程A中执行的,达到了线程切换的效果。

问题3:Handler内存泄漏的原因是什么?

在使用Handler时,通常会通过匿名内部类的方式来实例化Handler。由于非静态的匿名内部类默认持有外部类的引用,如果Handler的生命周期与宿主的生命周期不一致,就会导致内存泄漏。例如,在Activity中实例化了一个非静态的匿名内部类Handler,并通过它发送了一个延迟消息。在消息还未执行时结束了Activity,由于Handler持有Activity的引用,就会导致Activity无法被GC回收,出现内存泄漏的问题。

为什么要使用 Binder?

性能: 移动设备中如果广泛的使用跨进程通信机制肯定会对通信机制提出严格的要求,而 Binder 相比较传统的进程通信方式更加的高效

安全:由于传统进程通信方式没有对通信的双方和身方做出严格的验证,只有上层协议才会去架构,如 socket 连接的 IP 地址可以人为的伪造;而 Binder 身份校验也是 android 权限模式的基础

Binder 的工作流程是什么样的?

性客户端首先获取服务器端的代理对象,所谓的代理对象实际上就是在客户端建立一个服务端的 “引用”,该代理对象具有服务端的功能,使其在客户端访问服务端的方法就像访问本地方法一样 性客户端通过调用服务器代理对象的方式向服务器端发送请求 性代理对象将用户请求通过 Binder 驱动发送到服务器进程 性服务器进程处理用户请求,并通过 Binder 驱动返回处理结果给客户端的服务器代理对象 随着面试过程中你的回答,面试官就会联想到更多的技术知识点,以此来了解你的技术面有多广,适不适合该职位,或者能不能往更高的职位上发展,全方位地考察你对技术的理解深度,以及解决问题的能力

面试官:我有一记 Framework 连环炮;看看你能撑到第几步?_服务器_02

标签:面试官,MessageQueue,Framework,Binder,Handler,线程,Looper,连环,消息
From: https://blog.51cto.com/u_16175637/7737838

相关文章

  • webman:worker exit with status 139(Webman-framework v1.5.7/PHP 8.1.1)
    一,报错信息:worker[webman:225916]exitwithstatus139进程会退出二,解决:禁用opcache模块:在php.ini中注释掉opcache,使它不生效,如下:[opcache];opcache.enable=1;opcache.enable_cli=1;opcache.jit_buffer_size=128M;opcache.jit=tracing;zend_extension=opcache......
  • Spring framework vs Spring Boot
    SpringframeworkvsSpringBoot:ConclusionAsyouhaveseen,SpringBootisjustawaythateasesdevelopmentofapplicationsbasedonSpringframework.Inotherwords,itcomplementstoSpringframeworkandSpringprojectsdevelopment.Tosummary:Both......
  • 【Android 开发】 面试官喜欢一直问到底?教你如何避免翻车沟通表达能力
    在信息爆炸的时代,Android开发领域的知识日新月异,如何提升自己的能力和找到适合自己的学习资源是一个常见的问题。自我介绍是面试的必备环节之一时长通常在三分钟以内。在自我介绍时,候选人应该简明扼要地介绍自己的经历和能力,突出自己的优势和特点,以及为什么适合这个职位。基础知识......
  • Spring Framework框架
    SpringFramework框架一、含义:简称为Spring,是一个开源的、综合性的Java应用程序开发框架。它提供了一系列的功能和特性,用于开发企业级的Java应用程序。二、主要模块支持IoC和AOP的容器IoC(InversionofControl,控制反转):一种设计原则1.含义:它指将对象的创建、依赖关系的管理......
  • Xcode传输包报错Missing signing identifier at UnityFramework.framework/Framewor
    Missingsigningidentifierat"/var/folders/7v/qtz4nc7n4zv025173khwftsm0000gn/T/XcodeDistPipeline.~~~7SDZNJ/Root/Payload/SJSD.app/Frameworks/UnityFramework.framework/Frameworks/libswiftCore.dylib".ios集成unity项目传包报错:删除Frameworks/UnityFramework.......
  • Django - rest_framework pagination 分页功能
     下载pipinstalldjangorestframework models.pyclassNews(models.Model):title=models.CharField(verbose_name="标题",max_length=128)create_time=models.DateTimeField(verbose_name="创建时间",auto_now_add=True)c......
  • Metasploit Framework
    简介目前最流行、最强大、最具扩展性的渗透测试平台软件基于Metasploit进行渗透测试和漏洞分析的流程和方法2003年由HDMore发布第一版,2007年用ruby语言重写框架集成了渗透测试标准(PETS)思想一定程度上统一了渗透测试和漏洞研究的工作环境新的攻击代码可以比较容易的......
  • spring boot错误之-Error (3, 32) java 程序包org springframework boot不存在
    问题:springboot错误之-Error(3,32)java程序包orgspringframeworkboot不存在用IDEA创建springboot,遇到上面的问题(我这里maven用的3.6.1版本)解决方法:在Settings里面,Maven路径和settings.xml要设置正确org.springframework.boot版本更改为2.1.0.RELEASE即可......
  • 面试官:聊聊ThreadLocal
    面试中ThreadLocal能问的,都在这了(qq.com)今天我们来盘一盘ThreadLocal,这篇力求对ThreadLocal一网打尽,彻底弄懂ThreadLocal的机制。话不多说,本文要解决的问题如下:为什么需要ThreadLocal应该如何设计ThreadLocal从源码看ThreadLocal的原理ThreadLocal内存泄露之......
  • Black-Box Attack-Based Security Evaluation Framework forCredit Card Fraud Detect
    Black-BoxAttack-BasedSecurityEvaluationFrameworkforCreditCardFraudDetectionModels动机AI模型容易受到对抗性攻击(对样本添加精心设计的扰动生成对抗性示例)现有的对抗性攻击可以分为白盒攻击和黑盒攻击。白盒攻击:攻击者可以访问有关目标模型的所有信息,包括训练集......