转载

Android、Java面试题整理

①.standard模式

a.Activity的默认启动模式

b.每启动一个Activity就会在栈顶创建一个新的实例。例如:闹钟程序

缺点:当Activity已经位于栈顶时,而再次启动Activity时还需要在创建一个新的实例,不能直接复用。

②.singleTop模式

特点:该模式会判断要启动的Activity实例是否位于栈顶,如果位于栈顶直接复用,否则创建新的实例。 例如:浏览器的书签

缺点:如果Activity并未处于栈顶位置,则可能还会创建多个实例。

③.singleTask模式

特点:使Activity在整个应用程序中只有一个实例。每次启动Activity时系统首先检查栈中是否存在当前Activity实例,如果存在

则直接复用,并把当前Activity之上所有实例全部出栈。例如:浏览器主界面

④.singleInstance模式

特点:该模式的Activity会启动一个新的任务栈来管理Activity实例,并且该势力在整个系统中只有一个。无论从那个任务栈中启动该Activity,都会是该Activity所在的任务栈转移到前台,从而使Activity显示。主要作用是为了在不同程序中共享一个Activity

3. Serializable和Parcelable区别

Serializable Parcelable
原理 将对象进行序列化,将一个对象转换成可存储或可传输的状态。可以在网络上进行传输,也可以存储到本地。 将一个完整的对象进行分解,分解后的每一部分都是Intent所支持的数据类型。
存储媒介 使用IO读写存储在硬盘上 直接在内存中读写,很明显内存的读写速度通常大于IO读写
实现 使用反射,序列化和反序列化过程需要大量 I/O 操作 自己实现封送和解封(marshalled &unmarshalled)操作不需要用反射,数据也存放在 Native 内存中,效率要快很多。
性能 使用了反射,序列化的过程较慢,并会产生大量的临时变量,从而引起频繁的GC。 更优

4. View 事件传递

Activity调用dispathTouchEvent()方法,把事件传递给Window;

Window再将事件交给DecorView(DecorView是View的根布局);

DecorView再传递给ViewGroup;

Activity ——> Window ——> DecorView ——> ViewGroup——> View

事件分发的主要有三个关键方法

dispatchTouchEvent() 分发

onInterceptTouchEvent() 拦截 ,只有ViewGroup独有此方法

onTouchEvent() 处理触摸事件

5. HashMap原理

6. onCreateMenuOption 在Activity哪个生命周期被调用到?

onResume
复制代码

7. Jetpack 使用

8. Okhttp和Retrofit

拦截器使用什么设计模式?
复制代码

9. 内存优化

  • 第一点: 如果只是想避免OutOfMemory异常的发生,则可以使用软引用。 如果对于应用的性能更在意,想尽快回收一些占用内存比较大的对象,则可以使用弱引用。

  • 第二点: 可以根据对象是否经常使用来判断选择软引用还是弱引用。 如果该对象可能会经常使用的,就尽量用软引用。 如果该对象不被使用的可能性更大些,就可以用弱引用。

10. 四种引用方式使用和区别

11. 线程池怎样复用?

12. ANR的原因

13. 如何统计页面桢率,app流畅?

https://www.jianshu.com/p/d126640eccb1
复制代码

14. Android虚拟机 Dalvik和ART区别

ART虚拟机是在Android5.0才开始使用的
复制代码
原文  https://juejin.im/post/5d80419af265da03c9272c36
正文到此结束
Loading...