博客
关于我
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/

你可能感兴趣的文章
multiprocessing.Manager 嵌套共享对象不适用于队列
查看>>
multiprocessing.pool.map 和带有两个参数的函数
查看>>
MYSQL CONCAT函数
查看>>
multiprocessing.Pool:map_async 和 imap 有什么区别?
查看>>
MySQL Connector/Net 句柄泄露
查看>>
multiprocessor(中)
查看>>
mysql CPU使用率过高的一次处理经历
查看>>
Multisim中555定时器使用技巧
查看>>
MySQL CRUD 数据表基础操作实战
查看>>
multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
查看>>
mysql csv import meets charset
查看>>
multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
查看>>
MySQL DBA 数据库优化策略
查看>>
multi_index_container
查看>>
MySQL DBA 进阶知识详解
查看>>
Mura CMS processAsyncObject SQL注入漏洞复现(CVE-2024-32640)
查看>>
Mysql DBA 高级运维学习之路-DQL语句之select知识讲解
查看>>
mysql deadlock found when trying to get lock暴力解决
查看>>
MuseTalk如何生成高质量视频(使用技巧)
查看>>
mutiplemap 总结
查看>>