【阿里巴巴】客户端岗-Android社招面试经历

1、Activity的启动模式。

(1)启动模式主要包括: standard, singleTop, singleTask, singleInstance.

(2)标准模式在每次启动时, 都会创建实例; 三种单例模式, 会根据情况选择创建还是复用实例。在Activity启动中, 创建实例的生命周期: onCreate -> onStart -> onResume;重用实例的生命周期: onNewIntent -> onResume。

(3)在AndroidManifest的Activity中,使用launchMode属性,可以设置启动模式,默认是standard模式;

2、Activity是如何缓存的?

3、Android的Service的生命周期有两种启动方法,有什么区别?

4、怎么保证service不被杀死/进程保活?

(1)Service设置成START_STICKY(onStartCommand方法中),kill 后会被重启(等待5秒左右),重传Intent,保持与重启前一样

(2)通过 startForeground将进程设置为前台进程,做前台服务,优先级和前台应用一个级别,除非在系统内存非常缺,否则此进程不会被 kill.具体实现方式为在service中创建一个notification,再调用void android.app.Service.startForeground(int id,Notificationnotification)方法运行在前台即可。

(3)双进程Service:让2个进程互相保护,其中一个Service被清理后,另外没被清理的进程可以立即重启进程。

(4)AlarmManager不断启动service。该方式原理是通过定时警报来不断启动service,这样就算service被杀死,也能再启动。同时也可以监听网络切换、开锁屏等广播来启动service。

5、动画有哪几类,各有什么特点,请简单分析下属性动画的实现原理。

6、请简述Handler/looper机制。

7、请介绍下activty的加载过程。

8、请分析下Android的事件分发机制,请详细说下整个流程。

(11)Activity是事件的起点,事件分被封装成MotionEvent对象发给Activity的dispatchTouchEvent方法。

(2)dispatchTouchEvent内部会把事件传给setContentView指定的布局,即根布局ViewGroup。

(3)根布局的dispatchTouchEvent在接收到事件后调用onInterceptTouchEvent方法。

(4)onInterceptTouchEvent方***判断是否拦截该事件,如果拦截就将事件传给onTouchEvent方法处理。不拦截就直接把事件传给子控件。

(5)onTouchEvent方法负责处理事件,返回值决定是否要消费掉该事件,返回true表示以后由此控件来处理该事件,返回false表示以后也不再接收该事件。

(6)当所有控件的onTouchEvent都返回false时事件由Activity的onTouchEvent来处理。

9、请分析下View的绘制流程。

10、请简述Android IPC机制及Binder原理。

11、请简要阐述下你对ClassLoader的理解/双亲委托机制。

12、请介绍下你知道的插件化框架,原理和框架。

13、请介绍下你知道的热修复框架。

AndFix、Dexposed、微信的Tinker、手机QQ的QFix和RocooFix。

14、如何加快冷启动速度?

15、Android开源框架用过多少?知道他们的具体实现吗?

发表评论

后才能评论