Android

线程间通信

  • 主线程和工作线程


    Android_第1张图片
    主线程和工作线程
  • 工作线程与工作线程


    Android_第2张图片
    工作线程与工作线程
  • 为什么主线程Looper.loop()一直死循环,为什么没有卡死?
    主要死循环中Looper.loop()中
Message msg = queue.next(); // might block

一直在等待,不占用CPU。

Android_第3张图片
image.png

具体看 nativePollOnce函数分析

自定义View

onMeasure()--->onLayout()--->onDraw()

注:除了自绘控件需要搞清楚三个方法(onMeasure, onLayout, onDraw)外其他两个自定义相对比较简单。

  • invalidate()与postInvalidate(),requestLayout()三者区别?
    | | invalidate() | postInvalidate() | requestLayout() |
    | ----- | ----- | ----- | ----- |
    | | 在ui线程执行 | 在工作线程执行 | |
    | | onDraw() | onDraw() | onMeause(),onLayout(),onDraw()|
  • onMeasure()有几种Mode?

有三种模式:
 UNSPECIFIED
  这说明parent没有对child强加任何限制,child可以是它想要的任何尺寸。
 EXACTLY
  Parent为child决定了一个绝对尺寸,child将会被赋予这些边界限制,不管child自己想要多大。
 AT_MOST
  Child可以是自己任意的大小,但是有个绝对尺寸的上限。

事件分发机制

  • Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
  • Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
  • 图解 Android 事件分发机制
    注:三个重要方法:
    • dispatchTouchEvent事件分发
    • onInterceptTouchEvent 事件拦截
    • onTouchEvent() 事件处理

跨进程通信IPC

RPC指的是跨进程远程调用,强调了调用的功能,即一个进程之间调用另外一个进程的方法。
IPC指的是进程间通信,android使用Binder机制来进行进程间的通信,没有调用的功能。

通信方式:

  • Binder机制
  • socket
  • 管道
  • 消息队列
  • 共享内存
  • 信号量

传递数据类型:

  • intent
  • 基本类型
  • 文件共享
  • Content Provider

RPC机制

Android_第4张图片
image.png

  • AIDL
    • Android Service完全解析,关于服务你所需知道的一切(上)
    • Android Service完全解析,关于服务你所需知道的一切(下)

Android适配

  • Android开发:最全面、最易懂的Android屏幕适配解决方案
  • Android切图
    • 1套标注dp图
    • 三套切图(hdpi,xhpi,xxhdpi)

Android动画

  • Frame Animation(帧动画):按顺序播放事先做好的图像
  • Tween Animation(补间动画):只能对View进行平移,缩放,渐变,旋转
  • Property Animation(属性动画):API11开始引入,基于Object进行属性改变而
    达到动画效果
  • 使用动画场景
    • 转场动画
    • 加载动画
    • 其他动画

Bitmap四种属性

ALPHA_8:每个像素占用1byte内存
ARGB_4444:每个像素占用2byte内存
ARGB_8888:每个像素占用4byte内存 (默认)
RGB_565:每个像素占用2byte内存(没有alpha属性)

Android绘制圆形图片的方法总结

  • 使用Xfermode 相交模式:一般选择这种方式
  • 通过裁剪画布区域实现:边角有锯齿
  • 使用BitmapShader:不适合画太复杂圆,比较耗内存

定义Java注解处理器

Android ListView 与 RecyclerView 对比浅析

  • 使用:ListView默认只支持垂直滚动,定义了比较多通用方法。RecyclerView支持水平和垂直滚动,定义比较多抽象接口具体实现由自己实现,扩展性强。
  • 缓存:ListView二级缓存,一是离开屏幕View加入缓冲池,进入屏幕view复用缓冲池view,二是缓存多种类型view,更换adaper就清空。RecyclerView比ListView多两级缓存四级缓存,另外两个缓存为默认缓存离开屏幕的2个view和多个RecyclerView共用一个缓存池(上限5个))。
  • 缓存本质区别:ListView缓存View,RecyclerView缓存View+ViewHolder+flag

生还是死?Android 进程优先级详解

  • 前台进程
  • 可见进程
  • 服务进程
  • 后台进程
  • 空进程

MVC,MVP,MVVM与架构经验谈

Android_第5张图片
image.png

插件化

  • 动态加载使用的类加载器
    • PathClassLoader:只能加载已经安装的apk,即/data/app目录下的apk
    • DexClassLoader:能加载手机中未安装的apk、jar、dex,只要能在找到对应的路径。
  • 插件化开源库
  • 简单理解Android Dalvik、ART及APK编译过程

参考资料

  • Android 开发工程师面试指南

你可能感兴趣的:(Android)