热门搜索 :
考研考公
您的当前位置:首页正文

[转][干货]2017已来,最全面试总结——这些Android面

来源:东饰资讯网

[转][干货]2017已来,最全面试总结——这些Android面试题你一定需要

相关阅读:

作者:尹star

前言

来年发完年终奖。也许有不少Android程序员开始摩拳擦掌蠢蠢欲动了。结合以往自己的经历,今天给大家总结下Android面试题,希望有帮助。

01

Activity生命周期?

这几乎是个老少咸宜,永远不会过时的问题,而且极有可能是第一个问题。这个问题当然没什么好讲的啦,死记硬背是没什么用的了,关键是理解。本人就曾遇到这个问题的变种问题,问onStart(),与onResume()有什么区别?如果面试官抛出这个问题,是不是有点措手不及。今天又听说有同学遭遇了更变态的问题:什么情况下Activity走了onCreat(),而不走onStart(),这简直就是脑筋急转弯嘛。

02

Service生命周期?

这里要注意service有两种启动方式,startService()和bindService()

03

理解Activity,View,Window三者关系

这个问题真的很不好回答。所以这里先来个算是比较恰当的比喻来形容下它们的关系吧。Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图)LayoutInflater像剪刀,Xml配置像窗花图纸。

1:Activity构造的时候会初始化一个Window,准确的说是PhoneWindow。

2:这个PhoneWindow有一个“ViewRoot”,这个“ViewRoot”是一个View或者说ViewGroup,是最初始的根视图。

3:“ViewRoot”通过addView方法来一个个的添加View。比如TextView,Button等

4:这些View的事件监听,是由WindowManagerService来接受消息,并且回调Activity函数。比如onClickListener,onKeyDown等。

04

四种LaunchMode及其使用场景

standard 模式

这是默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中。使用场景:大多数Activity。

singleTop 模式

如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。使用场景如新闻类或者阅读类App的内容页面。

singleTask 模式

如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的 onNewIntent() )。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移出栈。如果栈中不存在该实例,将会创建新的实例放入栈中。使用场景如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。

singleInstance 模式

在一个新栈中创建该Activity的实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例( 会调用实例的 onNewIntent() )。其效果相当于多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。使用场景如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。

05

View的绘制流程

measure过程

layout过程

draw过程

06

Touch事件传递机制

public boolean dispatchTouchEvent(MotionEventev);

//用来分派event

public boolean onInterceptTouchEvent(MotionEventev);

//用来拦截event

public boolean onTouchEvent(MotionEventev);

//用来处理event

其中Activity和View控件(TextView)拥有分派和处理事件方法,View容器(LinearLayout)具有分派,拦截,处理事件方法。这里也有个比喻:领导都会把任务向下分派,一旦下面的人把事情做不好,就不会再把后续的任务交给下面的人来做了,只能自己亲自做,如果自己也做不了,就只能告诉上级不能完成任务,上级又会重复他的过程。另外,领导都有权利拦截任务,对下级隐瞒该任务,而直接自己去做,如果做不成,也只能向上级报告不能完成任务。

07

Android中的几种动画

曾被问到Android中有几种动画,这个问题也好难回答。Android3.0之前有2种,3.0后有3种。

FrameAnimation(逐帧动画):将多张图片组合起来进行播放,类似于早期电影的工作原理,很多App的loading是采用这种方式。

TweenAnimation(补间动画):是对某个View进行一系列的动画的操作,包括淡入淡出(Alpha),缩放(Scale),平移(Translate),旋转(Rotate)四种模式。

PropertyAnimation(属性动画):属性动画不再仅仅是一种视觉效果了,而是一种不断地对值进行操作的机制,并将值赋到指定对象的指定属性上,可以是任意对象的任意属性。

08

Android中跨进程通讯的几种方式

1:访问其他应用程序的Activity

如调用系统通话应用

Intent callIntent=new Intent(Intent.ACTION_CALL,Uri.parse("tel:12345678");

startActivity(callIntent);

2:Content Provider

如访问系统相册

3:广播(Broadcast)

如显示系统时间

4:AIDL服务

09

AIDL理解

10

Handler的原理

11

Binder机制原理

12

热修复的原理

1:JavaSisst

2:AspectJ

3:Xposef

13

设计一套图片异步加载缓存方案

14

Android内存泄露及管理

15

Activity和Fragment通信

16

Fragment的那些坑

17

Android UI适配

18

布局优化

19

20

网络请求优化

21

数据库优化

22

图片优化

23

HybridJAVA和JS交互

24

单例设计模式

25

JAVA GC原理

26

ANR

27

28

JAVA注解反射原理

29

算法

30

设计模式

31

RxJava

32

MVP,MVC,MVVM

33

35

Android 5.0

36

Android6.0运行时权限

37

Android7.0新特性

38

Android插件化和组合化开发

Top