Android 知识点总结 持续更新

匿名 (未验证) 提交于 2019-12-03 00:38:01

Javaƪ

1、ArrayList和LinkedList区别


相同点:1、都实现List

类型内部结构顺序遍历速度随机遍历速度追加代价插入代价删除代价占用内存
ArrayList数组

LinkedList双向链表


2、ArrayLis和Vector区别


相同点:1、都实现List

不同点:1、ArrayList线程不安全的,Vector线程安全,单线程中ArrayList性能更好


3、fori 与foreach性能比较



100条数据


foreach 遍历ArrayList花费时间0
foreach 遍历LinkedList花费时间0

1000条数据


foreach 遍历ArrayList花费时间5
foreach 遍历LinkedList花费时间6

10000条数据


foreach 遍历ArrayList花费时间3
foreach 遍历LinkedList花费时间105

100000条数据


foreach 遍历ArrayList花费时间13

foreach 遍历LinkedList花费时间11107

200000条数据


foreach 遍历ArrayList花费时间29
foreach 遍历LinkedList花费时间80035

1000000条数据


foreach 遍历ArrayList花费时间143
foreach 遍历LinkedList花费时间太久

时间单位毫秒,根据打印,可以知道数据量1000条内两种循环几乎无差别,10000条左右foreach出现了短暂优势

更多条数据时还是fori 更有优势


4、HashMap原理



HashMap详解


5、容器类继承关系



6、http有几种请求方法,他们有何区别


HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法

HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法

最常用的是GET、POST

区别: 1、GET 主要用于获取数据,POST主要用于提交数据,比如表单、文件。


7、Object有哪些非私有方法及作用

11个方法

public final native Class<?> getClass();

public native int hashCode();

public boolean equals(Object obj) {

}

protected native Object clone() throws CloneNotSupportedException;

public String toString() {

}

public final native void notify();

public final native void notifyAll();

public final native void wait(long timeout) throws InterruptedException;

public final void wait(long timeout, int nanos) throws InterruptedException {

















}

public final void wait() throws InterruptedException {

protected void finalize() throws Throwable { }


Androidƪ


1、APP启动过程


2、Activity启动过程


3、ClassLoader



3)系统类加载器(System ClassLoader):一般来讲,java应用的类都是由它加载完成的,是根据java的应用类路径来加载java类。



1)加载:处于class装载的第一个阶段,这时jvm必须完成通过类的全面获取类的二进制数据流,解析类的二进制数据流为方法区内的数据结构,创建java.lang.Class的实例。

2)连接:

验证:验证字节码文件,保证加载的字节码是符合规范的。
准备:正式为类变量(static修饰的变量)分配内存,并设置内变量的初始值,这些内存都将在方法区进行分配(不包括实例变量)。
解析:将类,接口,方法和字段的应用转为直接引用。


3)初始化:如果前面的步骤都没有出现问题,那么表示类可以顺利的装载到系统中。这个时候才会执行java字节码。初始化阶段的主要工作是执行类的初始化方法。


4、Android消息机制

点击打开链接


5、View绘制流程

基本分为measure、layout、draw 过程

点击打开链接


6、事件传递机制

点击打开链接


7、进程优先级

1、前台进程(Foreground process)。它表明用户正在与该进程进行交互操作,android系统依据下面的条件来将一个进程标记为前台进程:


该进程持有一个用户正在与其交互的Activity(也就是这个activity的生命周期方法走到了onResume()方法)。
该进程持有一个Service,并且这个Service与一个用户正在交互中的Activity进行绑定。
该进程持有一个前台运行模式的Service(也就是这个Service调用了startForegroud()方法)。
该进程持有一个正在执行生命周期方法(onCreate()、onStart()、onDestroy()等)的Service。
该进程持有一个正在执行onReceive()方法的BroadcastReceiver。
一般情况下,不会有太多的前台进程。杀死前台进程是操作系统最后无可奈何的做法。当内存严重不足的时候,前台进程一样会被杀死。


2、可见进程(Visible process)。它表明虽然该进程没有持有任何前台组件,但是它还是能够影响到用户看得到的界面。android系统依据下面的条件将一个进程标记为可见进程:


该进程持有一个非前台Activity,但这个Activity依然能被用户看到(也就是这个Activity调用了onPause()方法)。例如,当一个activity启动了一个对话框,这个activity就被对话框挡在后面。
该进程持有一个与可见(或者前台)Activity绑定的Service。


3、服务进程(Service process)。除了符合前台进程和可见进程条件的Service,其它的Service都会被归类为服务进程。


4、后台进程(Background process)。持有不可见Activity(调用了onStop()方法)的进程即为后台进程。通常情况下都会有很多后台进程,当内存不足的时候,在所有的后台进程里面,会按照LRU(最近使用)规则,优先回收最长时间没有使用过的进程。


5、空进程(Empty process)。不持有任何活动组件的进程。保持这种进程只有一个目的,就是为了缓存,以便下一次启动该进程中的组件时能够更快响应。当资源紧张的时候,系统会平衡进程缓存和底层的内核缓存情况进行回收。


8、Activity生命周期、service生命周期

9、序列化Serializable和Parcelable的理解和区别


点击打开链接


10、Context继承关系



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!