安卓八股文
默写以下八股文 ps:下述内容为我个人默写过程,简化版,不保证准确性,仅供参考
安卓四大组件是什么 1、activity 2、service 3、广播接收器 ❌ 4、内容提供者 ❌
重组? activity在第一次运行的时候生成一颗视图树,每次状态改变的时候和视图树中的节点进行对比,看看是否改变了,如果改变了则进行重组,重新测量和定位,最终进行渲染。
composable生命周期?
重组: 删除:
子线程能否更新UI?为什么 不能更新,安卓不保证线程池安全,多个线程会导致绘制混乱
xm和compose的区别? xml是命令式:通过命令驱动UI ❌ compose是声明式:通过状态来驱动UI更新
Activity的生命周期 onCreate():初始化 onStart():启动态,处在后台 onRessume():进行聚焦,在页面显示 onPause():暂停态,动画停止❌ onStop():停止态, ondestroy:销毁态,进行资源清理 onReStart():重启态
Fragment的生命周期 和Activity进行关联 创建视图:❌
销毁视图: 和Activity取消关联
谈谈Activity和Fragment的区别? 生命周期不同 Fragment切换时更流畅❌
ActivityA启动另一个ActivityB会调用哪些方法?如果B是透明主题的又或者是个DialogActivity呢?
ActivityA的pause()
然后调用ActivityB的create -> start -> ressume()
ActivityA的stop() ❌(stop应该在最后)
如果B是透明主题的又或者是个DialogActivity呢?
则不调用最后的stop()
什么是dp? 可以动态的根据屏幕密度计算像素值 px:像素单位 sp:字体样式,和dp类似 但是可以适配系统字体
谈一谈MVC、MVP、MVVM的理解? MVC:模型(负责数据)、视图(负责视图渲染)、控制器(负责业务逻辑的处理) MVP:MVC的变体,P指的是主持者,从模型中获取数据在视图中进行渲染 MVVM:数据和视图双向绑定
Activity和Fragment之间常见的几种通信方式? 1、实现接口 2、ViewModel 3、通过handler ❌
说下横竖屏下Activity的生命周期?❌ 如果不配置configchange pause->stop->destory->create->start->ressume
进程间通信的方式 正常的有:管道、共享内存、消息队列、信号量、信号、套接字、文件等 安卓中使用binder,核心是binder驱动实现数据共享和通信 每个进程都有自己的binder,当向其他进程进行通信时则获取其他进程的binder引用。 然后通过binder引用向对方发送信息,binder驱动会将信息传递给目标进程进行处理,然后通过binder驱动器返回结果。❌
线程间通信的方式?❌ 核心是通过handler,一个线程将消息发送到另一个线程的消息队列中 每个线程都有自己的looper和消息队列、handler 消息队列:存储信息 looper:不断循环从消息队列中获取信息,底层是epoll机制,然后分给对应的handler进行处理 handler:处理信息,放回目标线程的消息队列中
触摸事件传递过程:事件分发机制 从Activity->ViewGroup->View 从Activity开始,传递到ViewGroup,看看是否拦截,如果不拦截则接着往下传递 最终传递到view,如果仍然未消费的话则回溯。viewGroup是否消费,Activity是否消费。
安卓中一个电机事件点击结束后是怎么被销毁的? 事件分发机制中被消费掉
looper最多能开几个线程? 1个,一个looper对应一个线程和一个messageQueue
handler的一个postDelay()方法知道吗? 用于延迟消费,设置消息的消费时间,到点则让looper取出来进行消费
如果创建了两个handler,如何知道哪个消息对应那个handler? 每个消息都会有自己绑定的handler
上下滑动事件和左右滑动事件的冲突如何处理? 在事件分发机制中的拦截器可以处理
recycleView了解吗?他是如何复用视图的?❌ 通过四级缓存? 一级缓存页面可见的 二级缓存页面可见范围附近的 三级缓存用户自定义的 四级缓存
