博客
关于我
2021大厂Android面试经历,最全的BAT大厂面试题整理
阅读量:632 次
发布时间:2019-03-14

本文共 1800 字,大约阅读时间需要 6 分钟。

HTML重申后的优化版本:

前言Android开发的朋友最近面试经验上,有一个关于哈夫曼算法的题目没答好,导致面试官对算法基础有了更高的要求。下面分享一些关于数据结构和算法的学习建议。

如果之前有学过数据结构和算法,建议大家不定时的去刷刷算法题因为从面试的角度来讲,目前 BAT 和 TMD 等一线互联网企业或多或少都会有几个算法题,而对应届毕业生来说,算法的要求度则更高!这里可以分享一下我收集整理的数据结构算法题含答案。

面试官:说说view中的事件分发Android中事件分发机制是android中常见的问题,一般大家都知道view的分发事件是从view的 Views.dispatchTouchEvent()到 ViewGroup dispatchTouchEvent()和 onView890()'s方法的调用顺序回到View和VieGroup的 onTouchEvent(),而这个流程可以用以下规律总结:事件从ViewGroup的 dispatchTouchEvent()调用开始,依次经过拦截阶段,再到View的 dispatchTouchEvent(),然后是View的 onTouchEvent(),最后回到ViewGroup的 onTouchEvent()。不熟悉方法名的朋友可以简单说:先是ViewGroup的分发到拦截,再到View的分发,然后返回到View的触发,最后再回到ViewGroup的触发。

ViewGroup拦截拦截和分发是两个相互关联的概念。拦截的条件是ViewGroup通过其 dispatchTouchEvent()方法返回true,拦截的结果是设置变量intercepted为true,这样在后续的处理中,会将事件传递给其子View。同样,ViewGroup的onInterceptTouchEvent()方法也是一个拦截入口,默认情况下返回false表示不拦截。这种情况下,事件会按照正常分发流程继续下去。

说说说有个ViewGroup,里面有个View,如果View在dispatchTouchEvent中不分发事件,并且只在action_move中拦截touch事件向下分发,问ViewGroup到View的各个action如何处理?

关于这个问题,我们需要从以下几个方面分析:事件分发的路径和拦截点。首先,ViewGroup在处理TouchEvent事件时,会先通过dispatchTouchEvent()的方法,如果返回true,则表示事件被拦截并传个给子View;否则事件继续向VEIEW传递。在这个例子中,View的dispatchTouchEvent返回false,这样ViewGroup会进入拦截点处理,在onInterceptTouchEvent中判断是否拦截。在这里,如果不拦截,则通过将一个called属性设置为false,此时View的dispatchTouchEvent方法不会被调用,事件会以向上传递的形式继续传递,直到找到能够处理事件的View。

另外,关于dispatchTransformedTouchEvent的实现,其主要作用是将事件参数进行转换,包括位置的修正和变换,然后由最终的子View处理。其中,如果子View为空,直接调用默认的dispatchTouchEvent。这种情况下,如果子view为空,事件会被当作直接处理的事件,按默认规则传递。

当只想实现拖拽而不实现点击该怎么处理?

考虑到Android的触摸事件处理机制,仅实现拖拽可以通过设置直接将事件拦截,并将事件传递给期望处理的View而不触发点击动作。这可以通过让View的dispatchTouchEvent返回true,同时确保在onTouchEvent中不额外处理点击事件。

最后对于很多刚入行的Android开发人员来说,提升技能的过程往往显得漫长且低效。收集整理的这些架构技术和面试经验希望能为各位开发者提供参考,减少他们的学习弯路。本文的重点在于是否能帮助到大家,其余的内容不算特别重要。

同时,我整理了多年的学习资料和架构发展导图,专门为有经验的Android开发者准备。这些资料涵盖了从入门到架构师的全套学习内容。

图片和链接已被去除注意:本文是对原文重申内容,并未进行创意转化

不论遇到什么困难,都不应该成为我们放弃的理由!

转载地址:http://napoz.baihongyu.com/

你可能感兴趣的文章
Mysql,sql文件导入和导出
查看>>
MYSQL:int类型升级到bigint,对PHP开发语言影响
查看>>
Mysql:mysql 5.X 报错 ERROR 1193 (HY000): Unknown system variable ‘validate_password_length‘
查看>>
MySQL:MySQL执行一条SQL查询语句的执行过程
查看>>
Mysql:SQL性能分析
查看>>
mysql:SQL按时间查询方法总结
查看>>
MySQL:什么样的字段适合加索引?什么样的字段不适合加索引
查看>>
MySQL:判断逗号分隔的字符串中是否包含某个字符串
查看>>
MySQL:某个ip连接mysql失败次数过多,导致ip锁定
查看>>
Mysql:避免重复的插入数据方法汇总
查看>>
M_Map工具箱简介及地理图形绘制
查看>>
m_Orchestrate learning system---二十二、html代码如何变的容易
查看>>
n = 3 , while n , continue
查看>>
n 叉树后序遍历转换为链表问题的深入探讨
查看>>
N-Gram的基本原理
查看>>
nacos config
查看>>
Nacos 与 Eureka、Zookeeper 和 Consul 等其他注册中心的区别
查看>>
Nacos2.X 配置中心源码分析:客户端如何拉取配置、服务端配置发布客户端监听机制
查看>>
NacosClient客户端搭建,微服务注册进nacos
查看>>
Nacos做注册中心使用
查看>>