美文网首页
Android知识点记录

Android知识点记录

作者: Jumping_张明 | 来源:发表于2019-02-13 18:19 被阅读0次

    1.Activity的启动模式、任务栈以及使用场景

    2.快速排序

    以数组第一个数值作为基值,从右向左寻找比基值小的数,从左向右寻找比基值大的数,然后互换。用i和j记录数组下标,一直到 i>=j 时,把基值和分界线值交换,把基值两边的数值继续进行快速排序,一直到每次的快速排序左下标 > 右下标为止

    3.final修饰一个对象,能否调用对象修改属性的方法

    可以。引用变量没变,引用变量所指向的对象中的内容还是可以改变的。总得来说对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

    4.子线程中如何使用Handler

    关键词:HandlerThread Looper

    5.如何进行单元测试,如何保证APP稳定

    6.TabLayout如何设置指示器的宽度包裹内容?

    7.注解如何获取,反射为何耗性能?反射 注解

    注解可以通过反射进行获取clazz.getAnnotation。反射的性能损失最大的出现在GetType()和GetMethod()这几个操作上面,因为是通过字符串遍历程序集寻找的,没有直接调用的快,java反射是要解析字节码,将内存中的对象进行解析,包括了一些动态类型,所以JVM无法对这些代码进行优化

    8.Java的GC机制,分代回收策略

    9.JVM--课程(有点鸡肋,讲的有点慢)

    JVM数据区三大核心
    代码解析

    10.Java运行时的内存分配

    JVM的内存可分为5个区:堆(heap)、栈(stack)和方法区(method,也叫静态区),本地方法区
    ,程序计数器

    11.类加载机制

    JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化
    (1)可以不可以自己写个String类

    答案:不可以,因为 根据类加载的双亲委派机制,会去加载父类,父类发现冲突了String就不再加载了;

    (2)能否在加载类的时候,对类的字节码进行修改

    答案:可以,使用Java探针技术,可以参考:Java探针-Java Agent技术-阿里面试题

    12.内存泄漏,OOM

    常见的内存泄漏:
    1、单例造成的内存泄漏
    2、非静态内部类创建静态实例造成的内存泄漏(这个解释非常好)
    3、Handler造成的内存泄漏
    4、线程造成的内存泄漏(匿名内部类的静态实例)
    5、资源未关闭造成的内存泄漏
    7、集合容器中的内存泄露
    8、WebView造成的泄露

    13.DVM和ART原理初探

    JVM与DVM区别:
    ①JAVA虚拟机运行的是JAVA字节码,Dalvik虚拟机运行的是Dalvik字节码
    ②Dalvik可执行文件体积更小(原因:为了减小执行文件的体积,安卓使用Dalvik虚拟机,SDK中有个dx工具负责将JAVA字节码转换为Dalvik字节码,dx工具对JAVA类文件重新排列,将所有JAVA类文件中的常量池分解,消除其中的冗余信息,重新组合形成一个常量池,所有的类文件共享同一个常量池,使得相同的字符串、常量在DEX文件中只出现一次,从而减小了文件的体积)
    ③JVM基于栈(所以每次访问数据cpu都要到内存中取到数据),DVM基于寄存器(寄存器是在cpu上的一块存储空间,cpu如果直接从寄存器上读取数据的话就会快很多)

    ART与DVM区别:
    DVM是运行时将DEX字节码转化成机器码,ART是安装时将DEX字节码转化成机器码并存储在设备的存储器上,所以ART应用运行更快、减少应用的启动时间、提高设备的续航能力。

    14.Retrofit的作用、原理和启示

    Retrofit用动态代理去定制接口定义的Call网络工作对象,用适配器去把底层的Call对象转换为目标Call对象,用函数解析/OkHttpClient/数据转换等实现对Call对象的适配转换,并能处理真正的网络请求。
    Retrofit使用到的知识点:依赖倒置、利用工厂类开放扩展、利用建造者模式把建造和使用分离、利用外观模式减少对复杂子系统的操作、利用动态代理实现自动>人工

    15.HashMap原理,Hash冲突,并发集合

    16.Activity的onNewIntent

    根据Activity的启动模式,当通过Intent启到一个Activity,而启动模式并不是重新创建一个实例的时候,会执行onNewIntent方法

    17.View的绘制原理

    View的绘制流程:OnMeasure()——>OnLayout()——>OnDraw()

    各步骤的主要工作:

    OnMeasure():测量视图大小。从顶层父View到子View递归调用measure方法,measure方法又回调OnMeasure。

    OnLayout():确定View位置,进行页面布局。从顶层父View向子View的递归调用view.layout方法的过程,即父View根据上一步measure子View所得到的布局大小和布局参数,将子View放在合适的位置上。

    OnDraw():绘制视图。ViewRoot创建一个Canvas对象,然后调用OnDraw()。六个步骤:①、绘制视图的背景;②、保存画布的图层(Layer);③、绘制View的内容;④、绘制View子视图,如果没有就不用;⑤、还原图层(Layer);⑥、绘制滚动条。

    18.requestLayout, invalidate和postInvalidate的异同

    requestLayout : 当当前布局的宽高发生改变的时候, 此时需要重新调用父view的onMeaure和onLayout, 来给子view重新排版布局
    invalidate : 让页面刷新, 重新调用onDraw方法,
    postInvalidate : 在子线程来让页面来进行刷新的方法


    image.png

    19.adb常用命令行

    adb root | adb remount | adb reboot | adb pull | adb push | adb install | adb shell | adb devices

    20.插件化和热修复

    21.Binder机制

    Android系统进程间通信机制Binder的总体架构由Client、Server、ServiceManager和驱动程序Binder四个组件构成。
    Q1:ServiceManager什么时候注册的?
    在main_mediaserver.cpp的main函数中sp<IServiceManager> sm = defaultServiceManager();

    22.Sychronize修饰类和对象的区别

    23.Android 内存管理机制 进程管理

    24.Java代码块执行顺序

    相关文章

      网友评论

          本文标题:Android知识点记录

          本文链接:https://www.haomeiwen.com/subject/nkmxjqtx.html