Android面试题——Android常见面试题

前言

使用说明:在某个主题下可点击的知识点链接可以访问对应的知识点,代码链接都指向同一个gitee开源仓库。Tag表示对应知识点在代码仓库中的标签。

知识点相关源码:代码。

一.Activity常见的问题知识点

1. Activity的生命周期(version_activity_1_2)

2. Activity A启动另一个Activity B会调用哪些方法?(version_activity_1_2)

3. 如果B是透明主题的又或则是DialogActivity呢?(version_activity_3)

4. 屏幕横竖屏旋转对Activity的生命周期的影响(version_activity_4)

5. onSaveInstanceState(),onRestoreInstanceState的调用时机

6.onStart和onRume/onPause和onStop的区别

7. Activity的启动流程

8. Activity的启动模式和使用场景

9. Activity之间传递数据的方式intent是否有大小限制,如果传递数据量大 ,有哪些方案

10. Activity显示启动和隐式启动

11. scheme使用场景,协议格式,如何使用

12.ANR的四种场景

13. onCreate和onRestoreInstance方法中恢复数据时的区别

14. 跨app启动Activity的方式,注意事项

15. Activity的任务栈是什么

16. 有哪些Activity常用的标记位Flags

17. Activity的数据是怎么保存的,进程被kill后,保存的数据怎么恢复的

18. View的绘制是在Activity哪个生命周期中被回调的。(dev_ondraw)

 onResume()之后。

相关内容

1.instrumentation 知识点1,知识点2 ;

一.二 、广播常见的问题

1.注册广播有哪几种方式?

2.静态注册和动态广播有什么区别,注册方式、缺点和优点、生命周期对比。

3.默认广播和有序广播对比。

4.本地广播和全局广播的区别

5.广播可以实现进程间的通信么,举个例子。

二、Handler常见面试题

1. Handler的实现原理

2.子线程中能不能直接new一个Handler,为什么主线程可以?主线程的Looper第一次调用loop方法,什么时候,哪个类?

3.Handler导致的内存泄露原理及其解决方案(version_handler_3)

4. Android中为什么主线程不会因为Looper.loop()里的死循环卡死

5. 一个线程可以有几个Handler,几个Looper,几个MessageQueue对象(1)

6.Message对象创建的方式有哪些&区别

7. Message.obtain()怎么维护消息池的

8. Handler有哪些发送消息的方法&区别

9. handler postDealy后消息队列有什么变化,假设先postDelay 10s,再postDelay1s,怎么处理这两条消息

10. MessageQueue是什么数据结构

11. Message中异步消息和同步消息有什么区别,消息屏障(version_handler_14)

12. Handler怎么做到一个线程对应一个Looper,如何保证只有一个MessageQueue ThreadLocal在Handler机制中的作用

13. HandlerThread是什么 & 好处 & 原理 & 使用场景

14. IdleHandler及其使用场景

15. 消息屏障,同步屏障

16. 子线程能不能更新UI

17. 为什么SurfaceView可以在子线程中更新UI

18. 为什么Android系统不建议子线程访问UI

19. MessageQueue#next在没有消息的时候会阻塞,如何恢复?

20. Handler消息机制中,一个Looper是如何区分多个Handler的

21.当Activity有多个Handler的时候,怎样区分当前消息由哪个Handler处理

22. 处理Message的时候怎么知道是哪个callback处理的

23. Looper.quit/quitSafely的区别

24. 通过Handler如何实现线程的切换

25. Handler如何与Looper关联的

26.Looper.loop()源码

27. MessageQueue的enqueueMessage()方法如何进行线程同步的

28. MessageQueue的next()方法内部原理

29. 子线程是否可以用MainLooper去创建Handler,Looper和Handler是否一定处于一个线程

30.ANR和Handler的联系

总结:

1.每个线程都可以多个Handler,1个Looper,1个MessagQueue,但是线程之间的Looper、MessageQueue互不相关,线程之间的Handler可以互相通信。

2.子线程中是否可以不调用Looper.prepare()就更新UI呢?可以的 ,前提要满足两个条件:(1)该UI view是在该子线程中创建的;(2)该view中不包含创建Handler的代码,因为Handler和一个Looper绑定,创建Handler时找不到Looper就会报错。

3.子线程中是否可以创建view,可以的,但是后续更新该UI都要在该线程中完成,否则会报错:应该在创建该view的原始线程中更新UI。 (version_childThread_create_UI)

三、Binder常见面试题

1. Android中进程和线程的关系,区别

2. 为何需要进行IPC,多进程通信可能会出现什么问题

3. Android中IPC方式有几种、各种方式优缺点

4. 为何新增Binder来作为主要的IPC方式

5. 什么是Binder,Binder的实现原理

6. Binder Driver如何在内核空间中做到一次拷贝的?

7. 使用Binder进行数据传输的具体过程

8. Binder框架中ServiceManager的作用

9. 什么是AIDL (version_aidl_basic),基本例子

10. AIDL支持哪些数据类型

11. AIDL的关键类,方法和工作流程

12. 如何优化多模块都使用AIDL的情况 (version_binder_optimize_more_aidl)

13. 使用Binder传输数据的最大限制是多少,被占满后会导致什么问题

14. Binder驱动加载过程中有内些重要的步骤

15. 系统服务与bindService启动的服务的区别

16. Activity的bindService流程

17. 不通过AIDL,手动编码来实现Binder的通信

18. 什么是序列化?Serializable接口和Parcelable接口的区别?为何推荐使用后者

1,3,8, 12,18

精简版答案。

19.Binder的定向制导,如何找到目标Binder,唤起进程或者线程

20. Binder中的红黑树,为什么会有两棵binder_ref红黑树

21. 传输Bitmap过大,就会崩溃的原因,Activity之间传输BitMap

22.Binder线程、Binder主线程、Client请求线程的概念与区别

23.Client是同步而Server是异步到底说的什么

24.Android APP进程天生支持Binder通信的原理是什么

25. Android APP有多少Binder线程,是固定的么

26. Binder线程的睡眠与唤醒(请求线程睡在哪个等待队列上,唤醒目标端哪个队列上的线程)

27. Binder协议中BC与BR的区别

28. Binder在传输数据的时候是如何层层封装的--不同层次使用的数据结构(命令的封装)

29. Binder驱动传递数据的释放(释放时机)

30. ServiceManager addService的限制(并非服务都能使用ServiceManager的addService)

31. Parcel readStrongBinder与writeStrongBinder的原理

32. Java层Binder实体与与BinderProxy是如何实例化及使用的,与Native层的关系是怎样的

33. 同一个线程的请求必定是顺序执行,即使是异步请求(oneway)

34. Binder线程的睡眠与唤醒(请求线程睡在哪个等待队列上,唤醒目标端哪个队列上的线程)

四、WMS

1. 什么是WMS

2.WMS是如何管理Window的

3.IWindowSession是什么,WindowSession的创建过程是怎样的

4.WindowToken是什么

5.WindowState是什么

6.Android窗口大概分为几种?分组原理是什么

7.Dialog的Context只能是Activity的Content,不能是Application的Context

五、View

1. View绘制流程

2. MeasureSpec是什么

3. 子View创建Measurespec创建规则是什么

4. 自定义Viewwarp_content不起作用的原因

5. 在Activity中获取某个View的宽高有几种方法

6.为什么onCreate获取不到View的宽高

7.View#post与Handler#post的区别

8.Android绘制和屏幕刷新机制原理

9.Choreography原理

10.什么是双缓冲

11.为什么是用SurfaceView

12.什么是SurfaceView

13.View和SurfaceView的区别

14.SurfaceView为什么可以直接子线程绘制

15.getWidth()方法和getMeasureWidth()区别

16.invalidate()和postInvalidate()的区别

17.RequestLayout,onlayout,onDraw,DrawChild区别于联系

18.LinearLayout/FrameLayout/Relativilayout哪个效率高

18.LinearLayout的绘制流程

19.自定义View的流程和注意事项

20.自定义View如何考虑机型适配

21.自定义控件优化方案

21.invalidate怎么局部刷新

22.View加载流程(setContentView)

六、Java常见的面试题

1.java中lock和synchronized的区别

2.java的基本特性

3.java的多态的三种形式

4.深拷贝和浅拷贝

5.java的四种引用(强引用、弱引用、软引用、弱引用),实例和讲解

6.JVM模型概述

7.JVM垃圾回收机制

8.JVM垃圾回收的几种算法实现

9.JVM是如何知道需要垃圾回收的?

10.引用型计算算法和可达性分析算法的具体思路、优缺点。

11.常见的垃圾回收算法有哪几种,具体思路和优缺点。

12.JVM中不能自动垃圾回收的几种场景?(容易造成内存泄露的情况)

13.

七、EvenBus

1. EvenBus总体介绍

八、常见的Android设计模式

1.Android设计模式原则

2.什么是观察者模式

九、多线程

1.线程和线程池

2.进程和线程有什么区别

3.锁有哪几种类型、区别

4.大规模并发加锁处理场景

5.wait和notify的理解

6.关于线程的基础知识

7.Synchronized的底层实现原理

十、计算机网络基础知识

1.Http与Https的区别?

2.对称加密和非对称加密的区别和联系?

3.视频传输使用的什么协议?

4.电话通信使用的什么协议?

5.网络上播放视频和下载视频发生了什么?

6.tcp和udp的区别?

十一、ANR(Application Not Response)

(yilink)

1.什么是ANR,常见的ANR场景

2.4种ANR场景?

3.你是如何在项目中处理ANR场景的?

4.Android系统是如何检测到ANR并弹出ANR框的?

5. 谷歌常见的处理ANR的方式是什么?

十二、动画

1.动画有哪几种?

2.属性动画和补间动画的区别?

3.属性动画的底层实现原理是什么?代码层面?

你可能感兴趣的:(Android,android,android,studio,ide)