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

你可能感兴趣的文章
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>
Mysql8在Centos上安装后忘记root密码如何重新设置
查看>>
Mysql8在Windows上离线安装时忘记root密码
查看>>
MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
查看>>
mysql8的安装与卸载
查看>>
MySQL8,体验不一样的安装方式!
查看>>