①.standard模式
a.Activity的默认启动模式
b.每启动一个Activity就会在栈顶创建一个新的实例。例如:闹钟程序
缺点:当Activity已经位于栈顶时,而再次启动Activity时还需要在创建一个新的实例,不能直接复用。
②.singleTop模式
特点:该模式会判断要启动的Activity实例是否位于栈顶,如果位于栈顶直接复用,否则创建新的实例。 例如:浏览器的书签
缺点:如果Activity并未处于栈顶位置,则可能还会创建多个实例。
③.singleTask模式
特点:使Activity在整个应用程序中只有一个实例。每次启动Activity时系统首先检查栈中是否存在当前Activity实例,如果存在
则直接复用,并把当前Activity之上所有实例全部出栈。例如:浏览器主界面
④.singleInstance模式
特点:该模式的Activity会启动一个新的任务栈来管理Activity实例,并且该势力在整个系统中只有一个。无论从那个任务栈中启动该Activity,都会是该Activity所在的任务栈转移到前台,从而使Activity显示。主要作用是为了在不同程序中共享一个Activity
Serializable | Parcelable | |
---|---|---|
原理 | 将对象进行序列化,将一个对象转换成可存储或可传输的状态。可以在网络上进行传输,也可以存储到本地。 | 将一个完整的对象进行分解,分解后的每一部分都是Intent所支持的数据类型。 |
存储媒介 | 使用IO读写存储在硬盘上 | 直接在内存中读写,很明显内存的读写速度通常大于IO读写 |
实现 | 使用反射,序列化和反序列化过程需要大量 I/O 操作 | 自己实现封送和解封(marshalled &unmarshalled)操作不需要用反射,数据也存放在 Native 内存中,效率要快很多。 |
性能 | 使用了反射,序列化的过程较慢,并会产生大量的临时变量,从而引起频繁的GC。 | 更优 |
Activity调用dispathTouchEvent()方法,把事件传递给Window;
Window再将事件交给DecorView(DecorView是View的根布局);
DecorView再传递给ViewGroup;
Activity ——> Window ——> DecorView ——> ViewGroup——> View
dispatchTouchEvent() 分发
onInterceptTouchEvent() 拦截 ,只有ViewGroup独有此方法
onTouchEvent() 处理触摸事件
onResume 复制代码
拦截器使用什么设计模式? 复制代码
第一点: 如果只是想避免OutOfMemory异常的发生,则可以使用软引用。 如果对于应用的性能更在意,想尽快回收一些占用内存比较大的对象,则可以使用弱引用。
第二点: 可以根据对象是否经常使用来判断选择软引用还是弱引用。 如果该对象可能会经常使用的,就尽量用软引用。 如果该对象不被使用的可能性更大些,就可以用弱引用。
https://www.jianshu.com/p/d126640eccb1 复制代码
ART虚拟机是在Android5.0才开始使用的 复制代码