安卓应用面试

Cordova

说明:一个移动框架,将HTML,CSS,JS封装为原生APP(hybird)

优点:跨平台,利于移植,能利用HTML5的各种特性,快速开发,成本低

缺点:不能使用设备的所以特性,执行速度慢、不像原生应用,与系统不协调,一次编写,处处调试

Cordova在前端哪个地方初始化: index.html

自定义View

view的绘制原理

基本流程如下:

1. 测量(measure):在View的measure方法中,View根据自身的LayoutParams和父容器的MeasureSpec来计算自己的测量宽度和高度,并将结果保存下来等待layout阶段使用。
2. 布局(layout):在View的layout方法中,View根据父容器的尺寸、自身的布局参数以及上一步计算出来的测量宽度和高度,来确定自身在父容器中的位置和大小。
3. 绘制(draw):在View的draw方法中,View调用自己的onDraw方法,利用Canvas进行实际的绘制操作。
可以看出,View的绘制过程分为三个阶段,其中测量和布局的过程主要是为了确保View在绘制的时候能够正确地显示在屏幕上。具体来说,测量阶段是为了确定View的尺寸,而布局阶段则是为了确定View的位置。
在绘制阶段,View会调用自身的onDraw方法来进行绘制操作,此时View会获取到一个Canvas对象,该对象可以用来绘制各种图形,包括矩形、圆形、线条等等。开发者可以在onDraw方法中使用Canvas对象提供的各种绘制方法,来绘制出自己想要的效果。
需要注意的是,View的绘制过程是按顺序进行的,并且是从父容器到子View进行绘制的。因此在绘制子View时,父容器会将自己已经绘制的部分作为剪裁区域,以保证子View不会绘制到自己的区域之外。
此外,为了提高性能,Android中还提供了View绘制的优化机制,例如View的双缓存机制、硬件加速等等。这些机制可以避免View频繁重绘,从而提高绘制效率。

View的绘制

 invalidate()和postInvalidate()的区别

invalidate()和postInvalidate()方法都是用来刷新View界面/View视图的。

1)区别:invalidate()是用来刷新View的,必须是在UI线程中进行工作。比如在修改某个view的显示时,调用invalidate()才能看到重新绘制的界面。invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉。 postInvalidate()直接可以在子线程中调用,可以直接刷新页面。

2)具体实现:①利用invalidate()方法刷新页面,要借用Handler类,并重写handleMessage方法调用invalidate()实现界面刷新;而在线程中通过sendMessage()方法发送界面更新消息;②使用postInvalidate则比较简单,不需要Handler,直接在线程中调用postInvalidate即可

事件分发机制

事件分发主要分三块:分发、拦截、消费; 当我们触摸到屏幕的时候,默认会先走Activity的分发,接着走ViewGroup的分发,然后到ViewGroup的拦截,后面再到View的分发事件,最后会传到View的消费事件,如果View不消费,紧接着回传到ViewGroup的消费事件,如果ViewGroup也不消费,最后回到View的消费事件。整个事件分发构成了一个u型结构,下面总结了分发的细节流程:

如果ViewGroup的dispatchTouchEvent返回true或false,touch事件不会往子view中传递,false的时候只会触发action_down,ViewGroup的onTouchEvent事件也不会被触发。只有在返回super.dispatchTouchEvent时候touch事件才会传递到子view。

如果ViewGroup的onInterceptTouchEvent返回false或者super.onInterceptTouchEvent时,touch事件会传递到子view。返回true事件不会向下传递,交给自己的ontouchEvent处理。

如果view的dispatchTouchEvent返回true或false,touch事件不会传给自己的ontouchEvent事件,返回false,只会触发action_down,move和up不会触发;返回true,才会触发move和up。返回super.dispatchTouchEvent,touch事件才会交给自己的onTouchEvent处理。

如果view的ontouchEvent返回false,只会有action_down事件,touch事件交给上一层处理,如果返回true才会消费,事件不会向上传递,如果返回super.ontouchEvent,得看clickable是不是返回true。

这里会问到事件冲突的问题?

事件遵循一个原则,就是看他有没有事件消费。比如一个LinearLayout里面有一个Button,点击LinearLayout会触发到Button吗,这里就看LinearLayout有没有设置点击事件,如果有就不会传递到Button,如果没有就会传递给Button。 
详情:onTouchEvent处理机制_ChampionDragon的博客-CSDN博客

安卓架构

 

 详情:

https://blog.csdn.net/xxdw1992/category_8811592.html

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/68503.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

0基础学习VR全景平台篇 第83篇:智慧眼-怎么理解分类?

一、功能说明 分类可以理解为,为了方便城市运营工作的管理所实行的行政区划,如XXX乡镇、XXX街道等等。 二、后台编辑界面 1、点击【新增】,填写分类的名称,若有上一级分类,那么还需选择父级分类,建议从最…

容灾备份服务器怎么样?

容灾备份服务器是一种用于保护信息系统的设备,它可以在系统出现故障时提供备用服务。容灾备份服务器通常包括两个部分:容灾和备份。容灾是指在遭遇灾害时能保证信息系统能正常运行,帮助企业实现业务连续性的目标。备份是为了应对灾难来临时造…

Mysql数据库之单表查询

目录 一、练习时先导入数据如下: 二、查询验证导入是否成功 三、单表查询 四、where和having的区别 一、练习时先导入数据如下: 素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等 CRE…

【python 深度学习】解决遇到的问题

目录 一、RuntimeError: module compiled against API version 0xc but this version of numpy is 0xb 二、AttributeError: module ‘tensorflow’ has no attribute ‘flags’ 三、conda 更新 Please update conda by running 四、to search for alternate channels that…

原型链污染

文章目录 1. javascript 原型链2. 原型链变量的搜索3. prototype 原型链污染4. 原型链污染例题4.1 题1:4.2.题2: 1. javascript 原型链 js在ECS6之前没有类的概念,之前的类都是用funtion来声明的。如下 可以看到b在实例化为test对象以后&…

【Linux】用户和权限

文章目录 前言什么是 root 用户su 命令和 exit 命令sudo 命令为普通用户配置 sudo 认证 用户、用户组管理什么是Linux 用户和用户组用户组管理用户管理创建用户删除用户查看用户所属组将指定用户添加到指定用户组中 查看当前系统的用户和用户组 权限控制权限信息 修改权限控制修…

【IDEA问题】下载不了源代码

引出问题 最近不知道怎么打开 IDEA,本想查看源代码,然后点击下载源码,总是报找不到此对象的源代码。百度找了半天,GPT问了半天还是解决不了,直到遇到了这篇:idea中无法下载源码问题解决,终于得…

74、75、76——tomcat项目实战

tomcat项目实战 tomcat 依赖 java运行环境,必须要有jre , 选择 jdk1.8 JvmPertest 千万不能用 kyj易捷支付 项目机器 选择 一台机器 ,安装jdk1.8的机器下载tomcat的包 上传到机器,解压tomcattomcat文件 bin文件夹: 启动文件 堆栈配置文件 catalina.sh JAVA_OPTS="-Xm…

Nginx反向代理配置+负载均衡集群部署

文章目录 负载均衡反向代理基础环境部署:什么是代理实验环境图流量过程 环境部署准备两台Web服务器安装Nginx准备页面内容添加主机名 代理服务器配置 修改windos hosts文件测试:终端浏览器 负载均衡反向代理基础环境部署: 什么是代理 正向代…

腾讯云轻量应用服务器CPU型号?处理器主频多少?

腾讯云轻量应用服务器CPU型号是什么?处理器主频多少?轻量应用服务器不支持指定CPU处理器型号,目前腾讯云服务器网账号下的轻量应用服务器,CPU采用2.5GHz主频的Intel(R) Xeon(R) Gold 6133 处理器,睿频 3.0GHz&#xff…

160. 相交链表 题解

题目描述:160. 相交链表 - 力扣(LeetCode) 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 注:本题中链表相交是“Y”型的&am…

ClickHouse(十三):Clickhouse MergeTree系列表引擎 - ReplicingMergeTree

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…

unity海康威视原生SDK拉取网络摄像头画面,并展示在一个Material上

原理是使用sdk获取视频流,格式为YUV,然后分离YUV通道到三张不同的Texture2D上,通过shader将三个通道重新输出为原始图像。 我将所用的各个部分已经整理成一个压缩包,免积分下载 压缩包结构如下 使用步骤 1 DLL:放在Plugins文件…

wordpress数据表中标签和分类如何区分?

wordpress中标签和分类是什么关系怎么区分?最后有一个群的网友告诉了我文章ID和标签ID的关系是放在了wp_term_relationships表中,然后我百度了下这个表的结构和相关介绍,发现果然如此,先把文章保存起来: wp_term_rela…

那些年的golang开发经验记录

goland 问题CreateProcess error216, 该版本的 %1 与你运行的 Windows 版本不兼容。请查看计算机的系统信息,然后联系软件发布者 Cannot run program "......" (in directory "D:\project\go\awesomeProject\src\test"): CreateProcess error2…

nginx基于主机和用户访问控制以及缓存简单例子

一.基于主机访问控制 1.修改nginx.conf文件 2.到其他主机上测试 (1)191主机 (2)180主机 二.基于用户访问控制 1.修改nginx.conf文件 2.使用hpasswd为用户创建密码文件,并指定到刚才指定的密码文件webck 3.测试…

Cocos Creator 3.8 后期效果 Shader 编写(2/2) 进阶篇

前言 在上一篇文章中,麒麟子给大家分享了如何在 Cocos Creator 3.8 中的自定义管线中,添加属于自己的后期效果 Shader。 但基于 BlitScreen 的方案,我们只能编写最简单后效 Shader,如果我们想要支持更多复杂的 Shader&#xff0c…

nginx动态同步配置模块nginx-upsync-module

使用场景简介 nginx一般直接在配置文件里配置upstream即可实现负载均衡,但有些特定的环境下此种方式就显得有些局限性。比如后台动态调整节点的时候;调整节点后不想修改配置文件重启nginx。 可以将配置文件从nginx本地迁移到其他第三方服务上如etcd、c…

Claude 2、ChatGPT、Google Bard优劣势比较

​Claude 2: 优势:Claude 2能够一次性处理多达10万个tokens(约7.5万个单词)。 tokens数量反映了模型可以处理的文本长度和上下文数量。tokens越多,模型理解语义的能力就越强)。它在法律、数学和编码等多个…

LinearAlgebraMIT_8_TheRankOfMatrix

这节课中主要讲解根据秩来判断方程组/矩阵的(solvability)解情况,即通过秩来判断(aumented matrix)增广矩阵的解。我们需要直接求解方程组的解就是求解矩阵的解。 x.1 判断(非齐次线性方程组)Axb是否有解 我们以下面这个方程组为例,它具有3个约束条件和…