先记下大体题目,持续补充。设计模式
onCreate() 建立活动,作一些数据初始化操做浏览器
onStart() 由不可见变为可见性能优化
onResume() 能够与用户进行交互,位于栈顶网络
onPause() 暂停,启动或恢复另外一个活动时调用app
onStop() 中止,变为不可见布局
onDestroy() 销毁性能
onRestart() 由中止状态变为运行状态优化
①.standard模式spa
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才开始使用的
复制代码
https://www.jianshu.com/p/b3b09fa29f65
复制代码