android面试笔试常见面试题

来源:互联网 发布:淘宝客服公司图片 编辑:程序博客网 时间:2024/06/06 15:37

一.View事件分发机制

dispatchTouchEvent->onTouch(返回true,事件已被消费,不会继续往下执行。返回false)->onTouchEvent->onClick().


二.ViewGroup事件分发机制

(1) 事件从Activity.dispatchTouchEvent()开始传递,只要没有被停止或拦截,从最上层的View(ViewGroup)开始一直往下(子View)传递。子View可以通过onTouchEvent()对事件进行处理。

 

(2) 事件由父View(ViewGroup)传递给子View,ViewGroup可以通过onInterceptTouchEvent()对事件做拦截,停止其往下传递。

 

(3) 如果事件从上往下传递过程中一直没有被停止,且最底层子View没有消费事件,事件会反向往上传递,这时父View(ViewGroup)可以进行消费,如果还是没有被消费的话,最后会到Activity的onTouchEvent()函数。

 

(4) 如果View没有对ACTION_DOWN进行消费,之后的其他事件不会传递过来。

 

(5) OnTouchListener优先于onTouchEvent()对事件进行消费。




ACTION_DOWN事件会传到某个ViewGroup类的onInterceptTouchEvent,如果返回false,则DOWN事件继续向子ViewGroup类的onInterceptTouchEvent传递,如果子View不是ViewGroup类的控件,则传递给子View的onTouchEvent。


如果onInterceptTouchEvent返回了true,则DOWN事件传递给VIewGroup的onTouchEvent,不再继续传递,并且之后的后续事件也都传递给它的onTouchEvent。


如果某View的onTouchEvent返回了false,则DOWN事件继续向其父ViewGroup类的onTouchEvent传递;如果返回了true,则后续事件会直接传递给其onTouchEvent继续处理。(后续事件只会传递给对于必要事件ACTION_DOWN返回了true的onTouchEvent)

三.android三种子线程更新UI的区别(View.post,Handler.post,activity.RunOnUiThread)



四.ListView卡顿的原因与性能优化

如果listview需要显示的item很多,就要考虑分页加载。

convertView的复用

viewHolder的嵌套使用

itemView的布局尽量简单

监听滑动结束后开始加载数据,滑动期间不加载

大数据采用异步加载的方式



五.图片缓存原理

采用 内存-文件-网络 三层cache机制,其中内存缓存包括强引用缓存和软引用缓存(SoftReference),其实网络不算cache,这里姑且也把它划到缓存的层次结构中。当根据url向网络拉取图片的时候,先从内存中找,如果内存中没有,再从缓存文件中查找,如果缓存文件中也没有,再从网络上通过http请求拉取图片。在键值对(key-value)中,这个图片缓存的key是图片url的hash值,value就是bitmap。所以,按照这个逻辑,只要一个url被下载过,其图片就被缓存起来了。 

六.equles与==的区别

==和Equals都是比较栈内存中的地址是否相等 。相等为true 否则为false;

  1. 有的对象重写了自己的equels方法,只要只想等就返回true。包括interger,string,date


  2. 七.Android5.0和6.0的新特征

  3. ->6.0

  4. 1.锁屏下语音搜索

  5. 2.指纹识别

  6. 3.更完整的应用权限管理

  7. 4.Doze电量管理

  8. 5.Now on Tap功能

  9. 6.App Links

  10. 地址:http://www.cr173.com/html/70261_1.html

->5.0

1.全新Meterial Design设计风格

2.ok Google语言指令

3.face unlock面部解锁

4.全新通知中心设计

5.project volta电池续航改进计划

6.安全性


八.内存溢出和内存泄漏有什么区别?何时会产生内存泄漏?内存优化有哪些方法?

内存溢出通俗理解就是软件(应用)运行需要的内存,超出了它可用的最大内存。

内存泄漏就是我们对某一内存空间的使用,使用完成后没有释放。

内存优化:Android中容易内存溢出的部分,就是图片的加载,我们可以使用图片的压缩加上使用LruCache缓存的目的来控制图片所能够使用的内存。

还有对于比较耗资源的对象及时的关闭,例如Database Conn , 各种传感器 , Service 等等。


九.程序之间的亲和性的理解。

1、默认情况下一个应用的所有Activity都是具有相同的affinity,都是从application中继承,application的affinity默认就是manifest的包名。

2、affinity对Activity来说,就像是身份证一样,可以告诉所在的Task,自己属于其中的一员。

3、应用场合:

a:根据affinity重新为Activity选择合适的宿主Task;

b:与allowTaskReparenting属性配合;

c:启动Activity使用Intent设置了FLAG_ACTIVITY_NEW_TASK标记。




0 0