Android高级UI面试题汇总(含详细解析 九)

安卓Android面试题汇总——超长15万字总结 本文介绍了Android开发中Activity与Fragment的通信方式,包括接口回调、Bundle传参、Handler、广播、EventBus和ViewModel等6种方法,分析了各自适用场景。接着讲解了Activity四种启动模式(standard、singleTop、singleTask、singleInstance)的特点和应用场景。最后对比了BroadcastReceiver和LocalBroadcastReceiver的区别,指出前者支持跨应用通信但性能较低,后者仅限应用内使用但更高效安全。 阅读详情

Android并发编程高级面试题汇总最全最细面试题讲解持续更新中👊👊
👀你想要的面试题这里都有👀
👇👇👇

Requestlayout,onlayout,onDraw,DrawChild区别与联系

这道题想考察什么?

考察同学对这几个方法背后的执行原理是否熟悉。

考生应该如何回答

讲解他们的工作流程,还有运行后的效果,从而对比他们的区别和联系

我们先来看View中的RequestLayout,看名字大家应该不难判断这个方法就是请求重新布局。

public void requestLayout() {
	//清空测量缓存
	if (mMeasureCache != null) mMeasureCache.clear();
	...
	//添加强制layout 标记,该标记触发layout
	mPrivateFlags |= PFLAG_FORCE_LAYOUT;
	//添加重绘标记
	mPrivateFlags |= PFLAG_INVALIDATED;

	if (mParent != null && !mParent.isLayoutRequested()) {
		//如果上次的layout 请求已经完成
		//父布局继续调用requestLayout
		mParent.requestLayout();
	}
	...
}

不难看出,这个递归调用和题目7.10 中invalidate是采用了一样的配方,向上寻找其父布局,一直到ViewRootImpl为止,给每个布局设置PFLAG_FORCE_LAYOUT和PFLAG_INVALIDATED标记,注意这个是关键,所有的布局都在递归中被设置了标志位,然后最终会走到ViewRootImpl里面的requestLayout(),看下面的代码:

public void requestLayout() {
	//是否正在进行layout过程
	if (!mHandlingLayoutInLayoutRequest) {
		//检查线程是否一致
		checkThread();
		//标记有一次layout的请求
		mLayoutRequested = true;
		//开启View 三大流程
        scheduleTraversals();
	}
}

所以,RequestLayout做的具体事情就是这样的:向上寻找父布局,找到后给他们标上强制layout和重绘的标签;然后 调用ViewRootImpl的 scheduleTraversals()开启三大绘制流程。

总结

RequestLayout()方法:会导致调用 onMeasure()方法和 onLayout(),将会根据标志位判断是否 需要 onDraw();
onLayout():摆放 viewGroup 里面的子控件,只有自定义ViewGroup需要重写;
onDraw():绘制视图本身(ViewGroup 还需要绘制里面的所有子控件);
drawChild(): 重新回调每一个子视图的 draw 方法 ,child.draw(canvas, this, drawingTime);

View的滑动方式

详细讲解

享学课堂系列课:高级UI专题:事件分发源码解析课程

这道题想考察什么?

Android中经常看到一些炫酷的效果,这些效果很多伴随着View的滑动。我们想要做出这样的效果,掌握View的滑动方式必不可少。

考察的知识点

View的滑动方式的概念在项目中使用及相关基本原理的理解。

考生应该如何回答

我们在使用View的过程中,经常需要实现View的滑动效果。比如ListView、跟随手指而移动的自定义View等等,前者的滑动效果是SDK为我们提供的,而对于我们自定义View的滑动效果就需要我们自己来实现,下面介绍四种滑动的方式,和大家一起共享一下。另外,在回答这个问题的时候,希望大家也去学习一下 View 的位置相关内容,View的坐标相关内容。

1、使用scrollTo/scrollBy

为了实现View滑动,Android专门提供了这两个方法让我们使用。这两个函数的区别是scrollBy提供的是基于当前位置的相对滑动,而scrollTo提供的是基于起始位置的绝对滑动。

需要注意的是实际的滑动方向与我们想当然的方向不同,这个问题与View的内部变量mScrollX和mScrollY的含义有关,scrollTo函数与scrollBy函数实际上就是对这两个变量做出修改。

mScrollX:View的左边缘坐标减去View内容的左边缘坐标。

mScrollY:View的上边缘坐标减去View内容的上边缘坐标。

另外一个需要注意的地方是超出View边缘范围的内容是不会显示的。

img

2、使用动画

动画的方式主要是操作View的translationX与translationY属性。可以使用XML文件自定义动画效果也可以使用属性动画实现。

2.1、自定义动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true">
    <translate
        android:duration="100"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="100"
        android:toYDelta="0"
        android:interpolator="@android:anim/linear_interpolator"/>
</set>
View view = findViewById(R.id.target_view);
Animation animation = AnimationUtils.loadAnimation(context, R.anim.target_animation);
view.startAnimation(animation);

注意在XML文件中有一个fillAfter属性,如果设置为false的话当动画结束时View会恢复到原来的位置。

2.2、属性动画

View view = findViewById(R.id.target_view);
ObjectAnimator.ofFloat(view, "translationX", 0, 100)
    .setDuration(100)
    .start();

使用动画来实现View的滑动思想:主要通过改变View的translationX和translationY参数来实现,使用动画的好处在于滑动效果是平滑的。

3、改变布局参数

第三种方法是改变View的LayoutParams,与之前的方法相比,这种方法显得不是很正统,但是也可以实现我们的需求。举个例子,假如我们想把一个View右移10dp,那么最简单的方式就是把它LayoutParams里的marginLeft参数的值增加10dp。但这种方法要根据View所在的父布局灵活调整,在一些情况下改变margin值并不能改变View的位置。

View view = findViewById(R.id.target_view);
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view .getLayoutParams();
params.leftMargin += 10;
mTargetTextView.setLayoutParams(params);

还有一个相似的方法,但可用性要好一些,那就是调用View的layout方法,直接修改View相对于父布局的位置。

int offsetX = 10;
View view = findViewById(R.id.target_view);
view.layout(mTargetTextView.getLeft() + offsetX,
            view.getTop(),
            view.getRight() + offsetX,
            view.getBottom());

通过改变布局参数来实现View的滑动的思想很简单:比如向右移动一个View,只需要把它的marginLeft参数增大,向其它方向移动同理,只需改变相应的margin参数;还有一种比较拐弯抹角的方法是在要移动的View的旁边预先放一个View(初始宽高设为0),然后比如我们要向右移动View,只需把预先放置的那个View的宽度增大,这样就把View“挤”到右边了。

4、使用Scroller实现渐进式滑动

上边提到的滑动方式有一个共同的缺点那是他们都不是渐进式的滑动。实现渐进式滑动的共同思想就是将一个滑动行为分解为若干个,在一段时间内按顺序完成。

这里介绍使用Scroller类的实现方式。

public class ScrollerTextView extends TextView {

    private Scroller mScroller;

    public ScrollerTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        mScroller = new Scroller(context);
    }

    public void smoothScrollBy(int dx, int dy) {
        int scrollX = getScrollX();
        int scrollY = getScrollY();
        mScroller.startScroll(scrollX, scrollY, dx, dy);
        invalidate();
    }

    @Override
    public void computeScroll() {
        super.computeScroll();
        if (mScroller.computeScrollOffset()) {
            scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
            invalidate();
        }
    }
}

大概了解下Scroller实现弹性滑动的原理:invaldate方法会导致View的draw方法被调用,而draw会调用computeScroll方法,因此重写了computeScroll方法,而computeScrollOffset方法会根据时间的流逝动态的计算出很小的一段时间应该滑动多少距离。也就是把一次滑动拆分成无数次小距离滑动从而实现“弹性滑动”。

由于面试题内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要2023年Android中高级最全面试真题答案 完整文档的可扫描下方卡片免费获取~

PS:(文末还有使用ChatGPT机器人小福利哦!!大家不要错过)

目录

img

第一章 Java方面

  • Java基础部分
  • Java集合
  • Java多线程
  • Java虚拟机

img

第二章 Android方面

  • Android四大组件相关
  • Android异步任务和消息机制
  • Android UI绘制相关
  • Android性能调优相关
  • Android中的IPC
  • Android系统SDK相关
  • 第三方框架分析
  • 综合技术
  • 数据结构方面
  • 设计模式
  • 计算机网络方面
  • Kotlin方面

img

第三章 音视频开发高频面试题

  • 为什么巨大的原始视频可以编码成很小的视频呢?这其中的技术是什么呢?
  • 怎么做到直播秒开优化?
  • 直方图在图像处理里面最重要的作用是什么?
  • 数字图像滤波有哪些方法?
  • 图像可以提取的特征有哪些?
  • 衡量图像重建好坏的标准有哪些?怎样计算?

img

第四章 Flutter高频面试题

  • Dart部分
  • Flutter部分

img

第五章 算法高频面试题

  • 如何高效寻找素数
  • 如何运用二分查找算法
  • 如何高效解决雨水问题
  • 如何去除有序数组的重复元素
  • 如何高效进行模幂运算
  • 如何寻找最长回文子串

img

第六章 Andrio Framework方面

  • 系统启动流程面试题解析
  • Binder面试题解析
  • Handler面试题解析
  • AMS面试题解析

img

【安全设备篇】HVV面试专题 还有就是这个可能是被访问的这个内网系统,本身业务系统存在业务逻辑问题,因为内网所布置的很多业务系统往往不会考虑一些安全性问题,比如在正常的业务逻辑请求中直接带了sql语句,就会触发设备规则产生告警,这一类是属于误报,然后会将此告警上报给研判人员,需要研判组专家和甲方客户确认下是否是该系统存在此业务逻辑问题,并且需要确认告警的源ip在此告警的时间段附近有没有进行操作过。天眼日志分析主要基于系统和应用程序的日志数据来识别安全威胁,而威胁感知则通过收集和分析多种来源的情报信息。理解威胁的性质和威胁背后的原理。 阅读详情

相关推荐

别再死磕NFP了!用Python+遗传算法搞定异形件自动排版(附完整代码)

本文介绍了如何利用Python和遗传算法实现异形件智能排版,解决传统NFP方法计算复杂的问题。通过Shapely库处理几何运算和DEAP库搭建遗传算法框架,结合模拟退火策略避免局部最优,显著提升材料利用率。附完整代码和优化技巧,适用于服装裁剪、金属加工等行业。

weixin_26965807的博客 236

【建议收藏】106道Android核心面试题及答案汇总(总结最全面的面试题)

对于Android的学习,很多⼈可能学了之后,不知道⾃⼰处于哪个阶段,也不到究竟要学到哪个程度,验证⾃⼰学得如何最好的⾯试,就是尝试去⾯试,⽽⾯试⽆⾮就是问你⼀些⾯试题。而我之前也有整理过一些面试题,但不是很完整。所小编重新整理了这些 Android ⾯试题,从 Java 基础,并发,虚拟机到Android Framework,开源框架,性能优化,并且附带了详细的答案,⽆论是想⾯试还是想看看⾃⼰学得如何,那么这份⾯试题,都值得你去学习。

m0_64365896的博客 1150

PyCharm中Pyvips配置避坑指南:为什么pip安装后import还是报错?

本文详细解析了在PyCharm中配置Pyvips时,即使pip安装成功,import仍报错的根本原因。核心在于Pyvips依赖的libvips原生库未正确配置环境变量。文章提供了从下载libvips、配置Windows系统PATH到PyCharm项目级设置的完整避坑指南,并对比了三种配置策略,帮助开发者彻底解决DLL加载失败问题。

bush的博客 209

Android高级UI面试题汇总(含详细解析 一)

View的绘制流程是面试最容易被问到的问题,而且这个问题面试者非常容易满足于一知半解。这道问题的正确的回答方式是从viewRootImpl开始,解析整个viewTree的构建分发流程。由于面试题内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要2023年Android中高级最全面试真题答案 完整文档的可扫描下方卡片免费获取~PS:(文末还有使用ChatGPT机器人小福利哦!!大家不要错过)

Misdirection_XG的博客 185

Vue3 - Element Plus上传组件el-upload上传多个文件时,让on-change监听事件仅执行一次并获取最终文件列表方法(开启多选文件并手动上传,拿到文件列表统一循环调用接口上传)

vue3,elementplus,Upload上传,el-upload,文件上传组件,上传组件on-change里执行多次,取消自动上传后change重复执行问题,upload上传多个文件后导致on-change执行多次拿不到最终文件列表,Element-plus的upload组件on-change不断执行怎么办,上传多个文件多次执行调用,上传多个文件时如何只执行一次on-change方法拿到最终的文件列表,vue3elementplus上传组件开启多个上传后导致change方法执行好几次,仅调用一

🏆 前端领域优质创作者 1万+

数据结构课程设计C/C++版--美团餐馆预定信息的管理与分析 1 2

本关任务:从文件user.txt中读取用户信息,包括账号、密码、联系方式等,创建一个用户信息的顺序表,根据账号判断顺序表中是否存在当前用户。如果存在,则添加失败。否则,判断输入的用户信息中是否有非法输入,若有则添加失败,否则将该用户作为新结点,按顺序插入到顺序表的相应位置,并将用户顺序表写入user.txt中。本关任务:从文件user.txt中读取用户信息,存入顺序表中。输入待查找的用户账号,调用折半查找算法判断用户顺序表中是否存在该用户的账号信息。如果存在,则返回其在顺序表中的位置,说明查找成功;

m0_62222486的博客 4954

2024最全Android大厂高级面试题,附答案!(选择题,填空题,简答题

在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。

2401_84537646的博客 2701

MIKE水动力笔记4_制作网格

建立水动力模型前的重要一步就是制作网格,本文所讲内容就是如何在MIKE中制作网格。

晏长街的博客 2万+

Android面试题总结(八)优化篇(内存优化和UI优化)

1.内存泄露和内存溢出分别是什么,他们之间有什么关系? 内存泄露是指保存了不可能再被访问的变量引用,导致垃圾回收器无法回收内存。 也就是说,在java中有些对象的生命周期是有限的,当他们完成了特定的逻辑后将会被垃圾回收;但是,如果在对象的生命周期本来该被垃圾回收时这个对象还被别的对象所持有引用,那就会导致内存泄露。 内存溢出是指虚拟机内存耗尽,无法为新对象分配内存,导致引用崩溃。典型的情况为...

Center.wei的专栏 4600

JEDEC 标准半导体功率循环热阻测试(JESD51 系列)

【代码】JEDEC 标准半导体功率循环热阻测试(JESD51 系列)

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 470

LangGraph教程8:LangGraph流式处理

流式处理可显著提升基于LLM应用的响应性。LangGraph支持两种流式模式:values模式返回每一步的完整结果,适合需要完整上下文处理的场景;updates模式仅返回增量变化,适用于实时更新需求。示例代码展示了如何用create_react_agent实现这两种模式,其中values模式完整记录处理流程,updates模式逐步输出结果。通过异步迭代输出流,开发者可以灵活选择适合应用场景的流式处理方式。

Cachel Wood的博客 620

2018 Android面试心得,已拿到offer

从16年毕业至今,就职过两家公司,大大小小项目做了几个,非常感谢我的两位老大,在我的android成长路上给予我很多指导,亦师亦友的关系。 从年前至今参加面试了很多公司,也收到了几家巨头的offer,还有其他公司的。总结下经验,也是对过去的一个回顾和总结吧。 一、简历 网上有很多对程序员简历的一些指导,这里就不重述,大家可以搜下网上其他大神的总结,结合自身情况修改下。我有几点建议: 1.尽...

huison的博客 5万+

华为服务器BMC方式安装系统-官方文档解读

华为服务器BMC方式安装系统 安装完成之后我们有两种方式去安装系统, > 一、服务器连接显示屏、键盘、鼠标和启动盘去启动服务器安装系统(弊端:需要制作单独启动盘并且需要硬件资源) > 二、使用BMC方式安装系统,也就是说使用网线连接我们的笔记本和服务器的BMC口或者mgt口去进行安装。

王明的博客 4579

Android高级UI详解汇总

Android高级UI开发(一)RecyclerView控件的基本使用 Android高级UI开发(二)RecyclerView控件使用----列表项的单击事件、添加(删除)列表项 Android高级UI开发 ( 三 )RecyclerView控件---高级进阶之自己绘制列表分隔线 ...

gaoxiaoweiandy的专栏 4438

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Android高级UI面试题汇总(含详细解析 十五)

Android并发编程高级面试题汇总最全最细面试题讲解持续更新中👊👊👀你想要的面试题这里都有👀👇👇👇。

Misdirection_XG的博客 158

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android中高级面试题汇总(2021年)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LxOXzNuG-1616402294221)(https://i.loli.net/2020/12/28/hWJbL4ptZUG7anF.png)] 基础篇 Java基础 静态内部类和非静态内部类有什么区别 谈谈你对java多态的理解+java方法的多态性理解 java中接口和继承的区别 线程池的好处+线程池的优点及其原理+线程池的优点 (重点) 为什么不推荐通过Executors直接创建线程池 不怕难之BlockingQue

yundashi168的博客 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android高级UI面试题汇总(含详细解析 十六)

Android并发编程高级面试题汇总最全最细面试题讲解持续更新中👊👊👀你想要的面试题这里都有👀👇👇👇。

Misdirection_XG的博客 144

超详细!Android 面试题大汇总与深度解析

创建一个继承自 View 或其子类的类:可以直接继承View,也可以根据需求继承TextViewImageView等更具体的子类。例如:java// 后续添加代码定义构造函数:一般需要定义至少两个构造函数,一个是在代码中创建 View 时调用的构造函数,另一个是在 XML 布局中使用时调用的构造函数。如果需要支持自定义属性,还需添加第三个构造函数。例如:java测量 View 的大小:重写方法,通过来确定 View 的宽度和高度。例如:java@Override// 假设默认宽度。

Android开发领域创作者 1万+

Android高级UI面试题汇总(含详细解析 十)

Android并发编程高级面试题汇总最全最细面试题讲解持续更新中👊👊👀你想要的面试题这里都有👀👇👇👇。

Misdirection_XG的博客 157

2022最新 Android 中高级面试题汇总(含答案解析)

准备面试少不了Android面试题复习,面试题也需要有方法,高效的进行复习,所以给大家分享一份《2022最新 Android 中高级面试题汇总》,基本涵盖了 Android中高级工程师面试必备知识点,希望可以帮助一些想要跳槽涨薪的朋友更好、更高效的复习,实现跳槽涨薪。

datian1234的博客 2826

Android高级UI面试题汇总(含详细解析 三)

Android并发编程高级面试题汇总最全最细面试题讲解持续更新中👊👊👀你想要的面试题这里都有👀👇👇👇。

Misdirection_XG的博客 224

Android高级UI面试题汇总(含详细解析 十三)

责任链模式是行为型设计模式中的一个。责任链模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。

Misdirection_XG的博客 188

Android高级UI面试题汇总(含详细解析 五)

第一点:子线程可以在ViewRootImpl还没有创建之前更新UI的第二点:访问UI是没有加对象锁的,在子线程环境下更新UI,会造成各种未知风险的第三点:Android开发者一定要在主线程更新UI操作,这个是职业习惯哦由于面试题内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要2023年Android中高级最全面试真题答案 完整文档的可扫描下方卡片免费获取~PS:(文末还有使用ChatGPT机器人小福利哦!!大家不要错过)

Misdirection_XG的博客 184

【必看】《2024最新Android中高级面试题汇总》它来了~_安卓 中高级

都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。技术发展的这么快,从哪些方面开始学习,才能达到高级工程师水平,最后进阶到Android架构师/技术专家?我总结了这 5大块;我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。

2401_84544363的博客 1078

Android高级UI面试题汇总(含详细解析 八)

RequestLayout()方法:会导致调用 onMeasure()方法和 onLayout(),将会根据标志位判断是否 需要 onDraw();onLayout():摆放 viewGroup 里面的子控件,只有自定义ViewGroup需要重写;onDraw():绘制视图本身(ViewGroup 还需要绘制里面的所有子控件);drawChild(): 重新回调每一个子视图的 draw 方法 ,child.draw(canvas, this, drawingTime);

Misdirection_XG的博客 174

Android高级UI面试题汇总(含详细解析二十)

名称原理优点适用对象说明浏览器缓存使用HTTP协议头部字段进行缓存控制支持HTTP协议层存储静态资源Android默认实现通过存储键值对实现存储空间大,数据在本地,安全便捷类似Cookies,存储临时的简单数据类似Android中的SP基于SQL利用数据库优势,增删改查方便存储复杂、数据量大的结构化数据不推荐使用,用IndexedDB替代IndexedDB通过存储键值对实现(NoSQL)存储空间大、使用简单灵活存储复杂、数据量大的结构化数据。

Misdirection_XG的博客 177
上一篇: Android高级UI面试题汇总(含详细解析 八)
下一篇: Android高级UI面试题汇总(含详细解析 十)
网络安全-XG
博客等级 码龄5年 1万+粉丝 2752原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值