IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 2022年Android中高级面试框架 -> 正文阅读

[移动开发]2022年Android中高级面试框架

Java

四大引用

泛型

集合 ——HashMap、ConcurrentHashMap源码和数据结构

多线程

反射

JVM ——类加载、内存模型、内存管理机制、垃圾回收机制

Android

四大组件和Fragment

activity

  1. 生命周期:常规7个生命周期+特殊情况下生命周期
  2. 启动模式:4个
  3. 启动方式:隐式与显示
  4. 启动过程(流程):跨进程启动;进程内启动
  5. Activity卡顿原因:频繁GC(内存泄漏、加载大数据、大图片)、UI绘制(UI线程耗时操作、过度绘制)
  6. 其他相关知识:传递数据、Activity任务栈

Service

  1. startService与bindService的区别:生命周期回调不同
  2. 启动流程
  3. Service与Activity通信:binder中注册Service回调,或广播发送消息
  4. Activity与Service通信:binder
  5. IntentService与HandlerThread源码

参考:Android四大组件之Service_Swuagg的博客-CSDN博客

BroadcastReceiver

  1. 广播分类:普通广播、系统广播、有序广播、本地广播
  2. 使用场景:App内部通信(多线程通信);不同App通信;系统与App通信
  3. 本地广播和全局广播区别:本地广播安全、高效、应用内使用,且只能动态注册;Handler实现与Binder实现
  4. 实现原理:观察者模式(观察者、被观察者、AMS消息中心)
  5. 静态广播无法接收到:include、exclude stop

ContentProvider

  1. 优点:提供一种进程间数据共享的方式;封装和解耦底层数据存储方式,使得数据操作变得简单、高效和安全

Fragment

  1. 生命周期:7+5
  2. Fragment与Activity、其他Fragment通信方式:接口回调、EventBus、共用ViewModel、Bundle的setArgs(Fragment重建时Bundle数据还在)

Handler

Hander消息分发机制

  1. handler实现原理
  2. Looper:ThreadLocal、ThreadLocalMap
  3. Handler:post和sendMessage区别
  4. Message:对象创建方式
  5. MessageQueue:单链表,enqueueMessage,next
  6. 同步屏障:为了让异步消息优先执行。MessageQueue.next判断 message.target ==null为屏障消息。另外,ViewRootImpl.scheduleTraversals中使用了同步屏障
  7. 子线程更新UI:每次更新UI时,ViewRootImpl.checkThread()检验线程是否是View的创建线程,onResume之前VIewRootImpl未被创建
  8. 子线程中是否可以用MainLooper去创建Handler,Looper和Handler 是否一定处于一个线程?

HandlerThread

  1. 问:项目中经常要执行耗时操作, 如果经常要开启线程,接着又销毁线程,这无疑是很消耗性能的,怎么解决?——线程池或HandlerThread
  2. HanderThread好处:开启一个线程起到多个线程的作用,用来执行多个耗时操作,而不需要多次开启线程
  3. HanderThread劣势:串行执行——此时可用线程池解决
  4. run方法运行结束后,线程依旧存活,因为MessageQueue阻塞等待下一消息到来

IdleHandler

  1. 触发时机:Looper循环出现空闲的时候,采取执行任务的一种机制
  2. 使用场景:启动优化

View

View绘制流程

  1. addView流程:ActivityThread.handleResumeActivity——WindowManagerImpl.addView——WindowMangerGlobel.addView——ViewRootImpl.setView——ViewRootImpl.scheduleTraversals——ViewRootImpl.doTraveral——ViewRootImpl.performTraversals
  2. performTraversals流程:performMeasure——DecorView.measure——DecorView.onMeasure——View.measure performLayout...
  3. Measure、Layout、Draw流程
  4. MeasureSpec:是View类的一个静态内部类,用来说明应该如何测量这个View,32位int型,前2位是测量模式SpecMode,低30位表示某种测量模式下的 规格大小SpecSize
  5. View.post与Handler.post区别:performTraversals时执行RunQueue
  6. SurfaceView、TextureView、SurfaceTexture区别:SurfaceView使用双缓冲机制,有自己的Surface,在独立线程绘制,在Android7.0之前不能平移、缩放;TextureView需要硬件加速,和View一样使用;SurfaceTexture对图像流采用OpenGL处理
  7. invalidate() 和 postInvalidate() 方法的区别:onDraw,非UI线程调用
  8. getWidth()方法和getMeasureWidth()区别:onLayout之后,onMeasure之后

View加载流程

setContentView——decorView——LayoutInflate——XML的pull方式IO操作——反射创建

View事件分发机制

自定义View

步骤:onMeasure,可以不重写,不重写的话就要在外面指定宽高,建议重写; onDraw,看情况重写,如果需要画东西就要重写; onTouchEvent,也是看情况,如果要做能跟手指交互的View,就重写

注意事项:如果有自定义布局属性的,在构造方法中取得属性后应及时调用recycle方法回收资源; onDraw和onTouchEvent方法中都应尽量避免创建对象,过多操作可能会造成卡顿

考虑机型适配:合理使用warp_content,match_parent。 尽可能地使用RelativeLayout。 针对不同的机型,使用不同的布局文件放在对应的目录下,android会自动匹配。 尽量使用点9图片。 使用与密度无关的像素单位dp,sp。 引入 android的百分比布局。 切图的时候切大分辨率的图,应用到布局当中,在小分辨率的手机上也会有很好的显示效果

布局、资源

动画

应用启动流程

系统启动流程

View事件分发机制

IPC通信

进程优先级与进程保活

AMS源码

WMS源码

数据结构与算法

线性表(数组、链表、队列和栈)

二叉树、红黑树

排序算法

查找算法

动态规划算法

贪心算法

LeetCode算法题

设计模式

创建型5个

行为型11个

结构型7个

应用架构

MVC、MVP、MVVM、MVI

模块化、组件化、插件化、热修复

性能优化

启动优化

卡顿(帧率)优化

内存优化(内存泄漏)

CPU优化

布局优化(绘制优化)

安全优化

PIA(Privacy Impact Assessment)隐私影响评估

SIA —— Fireline火线扫描、娜迦扫描、Converity

开源框架源码

Glide

OkHttp3

Retrofit

EventBus

Arouter

网络

三次握手、四次挥手

Http请求头、响应头

四层网络模型

网络请求过程

Socket通信

参考:全面&详细的面试指南:计算机网络篇 (附答案)_Carson带你学Android的博客-CSDN博客

数据存储

设计一个日志系统

SP、DataStore、MMKV

File

Sqlite、ContentProvider、GreenDao

图片

图片三级缓存

加载大图

加载大量图片

Kotlin

其他

蓝牙BLE通信

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 23:19:35  更:2022-04-06 23:21:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 21:38:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码