![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android面试整理2021
文章平均质量分 89
mayundoyouknow
喜欢运动,爱思考
展开
-
【Android】加密算法相关知识点
主要用在明文传输敏感数据如密码等,存储本地的敏感数据利用加密解密来存取。Java的加密算法主要分为:对称加密、非对称加密、摘要算法。推荐文章如下:常见的加密算法代码示例Android常用的加密方式加密方式分类:一、对称加密算法(加密和解密密钥相同,DES、3DES、AES)密钥管理复杂,不适合互联网,一般用于内部系统;安全性中;加密速度极快,适合大数据量的加密处理;加解密的过程是可逆的。名称 密钥名称 运行速度 安全性 资源消耗 DES 56位 .转载 2022-03-10 17:21:29 · 1180 阅读 · 1 评论 -
Android屏幕、坐标系、Padding、Margin
一、屏幕二、坐标系分类1、屏幕坐标系该坐标系是以屏幕的左上角为原点(0, 0), 水平向右代表 x 方向的正方向, 垂直向下代表 y方向的正方向。而触控事件中,使用getRawX()和getRawY()方法。获取的坐标就是以这个坐标系为标准下的坐标值。2、布局坐标系该坐标系是以 viewgroup 的左上角为坐标原点, 水平向右代表 x 方向的正方向, 垂直向下代表 y 方向的正方向,view 的坐标是在 layout 布局过程中做确定的。也就是view在viewgroup...转载 2022-03-02 14:47:16 · 1902 阅读 · 0 评论 -
流式布局FlowLayout支持行数控制,单选,多选,点击等操作
开发中内容搜索页面经常会记录搜索关键字,搜索关键字长度不一,我们通过会采用自定义流布局的方式展示;流布局的基本需要是动态添加childView并实现自动换行操作,这个操作比较简单,重写ViewGroup的onMeasure()方法,遍历动态计算每个View的宽高,宽度累加,当超过ViewGroup宽度时,则换行显示,负责设置子控件的测量模式和大小,根据所有子控件设置自己的宽和高;然后重写onLayout()方法,完成对所有的childView的位置以及大小的指定;我们有时候也会显示用户标签,标签长度不一原创 2022-03-02 11:26:33 · 1639 阅读 · 0 评论 -
Android保存图片到本地兼容Android 10+及ScopedStorage(分区存储)的介绍
Scoped Storage介绍Scoped Storage由来Android长久以来都支持外置存储空间这个功能,也就是我们常说的SD卡存储。这个功能使用得极其广泛,几乎所以开发者在开发的时都喜欢在SD卡的根目录下建立一个自己应用的专属的目录,用来存放各类文件和数据。导致SD卡的文件管理变的异常混乱。而且用户即使我卸载了一个完全不再使用的程序,它所产生的垃圾文件却可能会一直保留在我的手机上,不会被自动删除,这就使用户的存储空间一直处于十分紧张的状态,还浪费了大量的存储资源。为了解决上述问题,Go原创 2022-03-01 18:03:24 · 2620 阅读 · 0 评论 -
Android图片分享问题采坑总结
我们项目中经常会用到微信分享,好友分享,朋友圈分享,收藏等功能,虽然开发了很多遍可能还是遇到各种问题,今天主要整理我在开发中遇到的问题;1.分享图片问题开发者在 App 中在集成微信 SDK 后,可调用接口实现,依次支持文字、图片、音乐、视频、网页、小程序类型分享,分享支持参考如下:WXMediaMessage (微信媒体消息内容)说明 | 微信开放文档;今天主要讲讲图片分享我遇到的一些问题,首先了解分享图片的限制如下:WXMediaMessage (微信媒体消息内容)说明字段 类原创 2022-02-28 16:43:00 · 1486 阅读 · 0 评论 -
Android 动画总结
在日常的Android开发中,经常会使用到动画,这里就对Android开发中的动画做一下总结。Android 动画分类总的来说,Android动画可以分为两类,最初的传统动画和Android3.0 之后出现的属性动画;传统动画又包括 帧动画(Frame Animation)和补间动画(Tweened Animation)。传统动画帧动画帧动画是最容易实现的一种动画,这种动画更多的依赖于完善的UI资源,他的原理就是将一张张单独的图片连贯的进行播放,从而在视觉上产生一种动画的效果;有点类转载 2022-02-20 16:47:00 · 202 阅读 · 0 评论 -
图解 RecyclerView 的缓存机制
本文的思路与结论是基于参考文档的Anatomy of RecyclerView: a Search for a ViewHolder与Anatomy of RecyclerView: a Search for a ViewHolder (continued)这两篇文章而来。由于这两篇文章的某些观点与其他文章的的不一致,我经过自己的理解与推断调试后,是支持这两篇文章的观点的,所以当你阅读参考文档时,需要自己考量。首先来从整体上来了解一下RecyclerViewRecyclerView 有五虎...转载 2022-02-17 21:03:09 · 980 阅读 · 0 评论 -
Android视图绘制流程和原理分析
作为一个Android开发人员,我们每天开发工作都会与View打交道,Android提供的任何布局,控件都是直接或者间接的继承View的,如LinearLayout,RelativeLayout,TextView,Button,ImageView,RecyclerView,ListView等;这些都是Android系统本身就提供好的,我们只需要拿过来使用就可以了,有时候我们需要自定义一些布局,那我们就需要知道View如何绘制到屏幕上?,以便我们能更好完成开发工作;Activity启动以后如何完成View原创 2022-02-13 16:17:07 · 2236 阅读 · 0 评论 -
kotlin学习笔记:object关键字介绍与java中的静态变量与静态方法的实现以及@JvmField和@JvmStatic的使用
在java中,静态变量和静态方法是我们经常需要用到的东西,但是我们在kotlin中,并不能找到static关键字。其实目前在kotlin中,也的确是static概念的,那么我们该如何在kotlin中实现静态变量和静态方法呢?这时就要用到kotlin中的object关键字了,下面文章的内容会将object的用法和静态的实现一起详细讲解Tip: 想要自己验证本文内容的小伙伴,请看文章《Kotlin学习笔记:如何将kotlin编译成java(必备小技能)》推荐Kotlin学习笔记:object关键字详.转载 2022-01-26 20:45:30 · 1175 阅读 · 0 评论 -
Android中的java基础(二)——装箱与拆箱及不同基本类型的比较(类型转换)
无论在Android还是java中,我们都会遇到基本数据类型以及对应到引用数据类型的转换操作等等,这里通过装箱拆箱操作以及类型转换进行实例分析。装箱和拆箱是jdk 1.5以及上版本出现的,其中装箱是指在程序设计中,值类型实例到对象的转换,它暗示在运行时实例将携带完整的类型信息,并在堆中分配。拆箱是将引用类型转换为值类型,利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类型链接起来。通过解释释义,我们可以理解Integer a = 1;这就是转载 2021-12-30 19:40:39 · 324 阅读 · 0 评论 -
Android中的java基础(一)——Integer等数字基本类型的-128到127范围的缓存
许多人可能认为在Android中使用的java函数以及方法对象等相关东西就完全就是jdk的内容,然而并不是,Android使用的是android.jar中java包内的东西,不是直接使用jdk中的东西。而且Android对应jdk版本,随着Android的sdk版本不同而不同。以下是各个sdk对应jdk的版本信息:平台版本 SDK版本 JDK版本 2.2 8 5 2.3.3 10 6 4.0.3 15 6 4.1 16 ...转载 2021-12-30 19:22:53 · 597 阅读 · 0 评论 -
学习java应该如何理解反射?
反射是一个非常重要的知识点,在学习Spring 框架时,Bean的初始化用到了反射,在破坏单例模式时也用到了反射,在获取标注的注解时也会用到反射······当然了,反射在日常开发中,我们没碰到过多少,至少我没怎么用过。但面试是造火箭现场,可爱的面试官们又怎会轻易地放过我们呢?反射是开源框架中的一个重要设计理念,在源码分析中少不了它的身影,所以,今天我会尽量用浅显易懂的语言,让你去理解下面这几点:(1)反射的思想以及它的作用: 概念篇(2)反射的基本使用及应用场景: 应用篇(3)使用反射能给我转载 2021-12-30 16:33:08 · 276 阅读 · 0 评论 -
TCP 和 UDP 的区别
前言前端的面试中经常问的 TCP 和 UDP 的区别,网上也有好多内容,比如TCP 和 UDP 的区别TCP 是面向连接的,UDP 是面向无连接的 UDP程序结构较简单 TCP 是面向字节流的,UDP 是基于数据报的 TCP 保证数据正确性,UDP 可能丢包 TCP 保证数据顺序,UDP 不保证之前也因为面试的原因了解过一下,但是面试官又问了为什么 TCP 是可靠传输,一下就露馅了,说不出来了,然后这两天就仔细了解了一下这方面的内容,还专门订阅了极客时间的趣谈网络协议,因此,这篇文转载 2021-12-28 14:17:08 · 205 阅读 · 0 评论 -
Android开发MVP模式--项目实战
1 前言苏宁+App是苏宁易购集团零售云研发中心分销研发中心主要产品之一,由于项目处于初期阶段,业务逻辑复杂,导致业务需求变动快,常常在开发甚至测试过程中出现界面或者后台接口调整的情况。App客户端如何在外部需求不断变化的情况下,降低模块耦合,尽可能减少每次代码修改量,一方面减少开发人员的工作量,另一方面降低测试工程师的工作量,最终顺利完成项目迭代开发。2 为什么使用MVP模式相信在2014年之前,绝大部分人开发Android应用,都是使用的MVC模式,M跟V一般没有什么问题,Controll转载 2021-12-26 18:28:29 · 607 阅读 · 1 评论 -
Android下MVP在项目的实践整理
此项目源码参考:设计模式讲解参考:MVC、MVP、MVVM三种区别_Tiger的专栏-CSDN博客MVP是Google开源的一个设计模式,主要是为了细分视图(View)与模型(Model)的功能,让View只做两件事:完成用户的交互; 显示界面布局,同时让Model做数据的处理,业务逻辑放到另外的一个类(Presenter)中。下面做具体分析:M:M层,在项目中负责数据的处理,包括本地数据库查询,网络数据获取都在这一层中完成; View:V层,在项目中是UI模块,也就原创 2021-12-26 18:13:19 · 1949 阅读 · 0 评论 -
弄清模块化、组件化、插件化的区别,业务开发提升一个档次
上次,我们讲了MVC、MVP、MVVM,其实从狭义上来讲,Android的架构概念就在这儿,无论怎么变,都是加加减减一些边边角角的东西,不足在意。从本篇开始,打算从广义上探究一下移动架构的思想;包括现在仍然比较火热的模块化,组件化, 插件化等架构思想。话说在前面,本篇旨在说明当前主流架构的设计概念,让大家了解当前的架构形式,以及主要用了什么设计思想,什么设计思路,算是引导篇...一、模块化,组件化,插件化上述概念已经好久了,或许还是有一些同胞对这些概念不是很清楚,大体知道是什么,但是详细也不知道转载 2021-12-23 10:47:39 · 612 阅读 · 0 评论 -
Android中的类加载机制
在类加载进内存以后,Android程序是通过ClassLoader类去加载内存中的类,然后进行解析运行的,在插件化技术中,因为需要我们自己去加载插件,所以要了解系统是怎么通过ClassLoader去加载类的,然后在这个过程中找到突破口,将我们的插件APK也加载进去,这篇文章咱们就说说关于Android中ClassLoader的一些知识。类加载流程一个类被加载到虚拟机内存中需要经历几个过程:加载、连接、初始化。其中连接分为三个步骤:验证、准备、解析,下面一个一个说,这个几个阶段虚拟机都干了什么。加转载 2021-12-22 20:46:36 · 1642 阅读 · 0 评论 -
缓存淘汰算法-LRU算法(kotlin实现)
LRU原理LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。实现1最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:1. 新数据插入到链表头部;2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部;3. 当链表满的时候,将链表尾部的数据丢弃。分析【命中率】当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命中率急剧下降,原创 2021-12-21 20:23:08 · 563 阅读 · 0 评论 -
解决ViewPager嵌套RecyclerView,RecyclerView嵌套RecyclerView瀑布流事件冲突问题
1.瀑布流效果2.嵌套滚动效果实现3.嵌套滚动浮动菜单栏3.1嵌套事件链接机制3.2实现上拉刷新,上拉加载更多原创 2021-12-20 19:47:25 · 1813 阅读 · 1 评论 -
【Android】onInterceptTouchEvent 方法收不到ACTION_MOVE事件
问题是这样的:我自定义一个父布局,继承自FrameLayout,然后重写其中的onInterceptTouchEvent方法和onTouchEvent方法。但是onInterceptTouchEvent 方法就是收不到ACTION_MOVE事件。问题实例Demo先看MainActivity。为了说明问题,这里demo做了简化。如下:public class MainActivity extends AppCompatActivity { @Override prot...转载 2021-12-20 11:11:36 · 990 阅读 · 1 评论 -
Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()
1.概述Android中触摸事件传递过程中最重要的是dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()方法;有很多工作几年的或者初学者总是感到困惑的问题之一,困惑的问题主要就是事件的传递机制和响应机制;今天我们就整理一下dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()的处理过程,方便理解;dispatchTouchEvent()是处理触摸事件分发,事件(多数情况)原创 2021-12-18 16:37:25 · 7230 阅读 · 1 评论 -
Android启动优化实战(有效降低APP启动时间)
1.启动页2.Application启动优化3.关闭APP优化4.启动时间分析5.常用启动分析工具原创 2021-12-07 20:12:51 · 4529 阅读 · 0 评论 -
Android之Gradle多Module常见配置修改和优化
1.Gradle生命周期?参考:Android之Gradle构建生命周期_Tiger的专栏-CSDN博客2.Gradle应用场景有哪些?Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。 面向Java应用为主。当前其支持的语言C++、Java、Groovy、Kotlin、Scala和Swi原创 2021-11-24 21:31:08 · 4904 阅读 · 0 评论 -
Android基于Glide(4.6.1)加载gif实践
1.Glide是什么?Glide是一个面向Android的快速高效的开源媒体管理和图像加载框架,它将媒体解码、内存和磁盘缓存以及资源池封装到一个简单易用的接口中;Glide支持获取、解码和显示视频静像、图像和动画GIF。Glide包括一个灵活的API,允许开发人员插入几乎任何网络堆栈。默认情况下,Glide使用自定义的基于HttpUrlConnection的堆栈,但也包括插件到Google的Volley项目或Square的OkHttp库中的实用程序库。Glide的主要重点是尽可能平滑和快速地滚动原创 2021-11-21 19:03:21 · 8217 阅读 · 1 评论 -
仿淘宝Android实现底部导航栏图标溢出效果-clipChildren属性
1.clipChildren和clipPadding说明clipChildren用来定义他的子控件是否要在他应有的边界内进行绘制。 默认情况下,clipChild被设置为true。 也就是不允许进行扩展绘制。 clipToPadding用来定义ViewGroup是否允许在padding中绘制。默认情况下,cliptopadding被设置为ture, 也就是把padding中的值都进行裁切了。还有该功能是android第一个版本就已经提供的方法,所有可以跨任意android版本使用;这两个属性联.原创 2021-11-21 14:52:18 · 3563 阅读 · 0 评论 -
Android之Gradle构建生命周期
Gradle进行构建,都经过3个生命周期阶段:初始化阶段 配置阶段 执行阶段Gradle提供了很多生命周期监听方法,可以在各阶段Hook指定的任务;1.ProjectProject提供的生命周期回调方法有//在Project进行配置前调用void beforeEvaluate(Closure var1);//在Project配置结束后调用void afterEvaluate(Closure var1);beforeEvaluate必须在父模块的build.gradle对原创 2021-11-14 16:32:21 · 2292 阅读 · 0 评论 -
Android使用gradle入门
1.gradle是什么?2.gradle如何引用?3.Android工程gradle配置?4Android工程下全局build.gradle配置和Module下build.gradle配置说明?5.gradle配置优化?6.原创 2021-11-13 20:48:13 · 5906 阅读 · 0 评论 -
Android常用的shape,selector,layer-list使用说明
shape的优势,Android开发中,使用shape可以方便的帮我们画出背景,相对于png图片来说,使用shape可以减少安装包的大小,而且能够更好的适应不同的手机;1.shape(GradientDrawable)shape顾名思义就是形状的意思,我们在平时开发的中,应用的频率也很高,该文件是一个xml文件,并放在drawable文件夹下如res/drawable/filename.xml,那么引用方式也很简单,我们一般在控件的background使用,如android:background=.原创 2021-11-10 19:11:23 · 2432 阅读 · 0 评论 -
Android之Window与WindowManager窗口管理
1.Window与WindowManager基本概念Window、PhoneWindow顶层窗口样式和行为的抽象类,概括了Android窗口的基本属性和功能。该类实例的getDecorView()方法返回的DecorView被用于作为顶层视图添加到WM中;创建时机:ActivityThread.handleLaunchActivity--->ActivityThread.performLaunchActivity--->Activity.attachWindowManager,Wi原创 2021-11-05 19:59:46 · 1488 阅读 · 0 评论 -
Android悬浮框实践
1.常见悬浮框显示样式示例及应用场景现在很多的应用都在使用悬浮框,例如微信视频,点击Home键以后,微信视频窗口一直停留在桌面上,小米手机屏幕上的快捷键(Home,锁屏...)等,那么我们今天将实现Android悬浮框,以及探索悬浮框常见错误;2.实现原理2.1悬浮框插入接口2.2...原创 2021-11-04 16:34:29 · 2050 阅读 · 0 评论 -
Android实现左右拖动,可以悬浮吸附边界的悬浮框
实现思路如下:1.实现拖动效果需要将拖动视图放入RelativeLayout或者FrameLayout视图内;2.定义拖动视图和视图拖动范围;3.重写拖动视图的onTouchEvent()方法;4.实现手势抬起后动画吸附屏幕左侧或右侧;实现可拖动功能的View:1.实现拖动效果需要将拖动视图放入RelativeLayout或者FrameLayout视图内;布局xml添加<?xml version="1.0" encoding="utf-8"?><Fram原创 2021-10-26 14:48:01 · 2917 阅读 · 0 评论 -
Android之ANR问题分析,触发原理,解决办法
1.ANR是什么?Application Not Responding,字面意思就是应用无响应,稍加解释就是用户的一些操作无法从应用中获取反馈;在实际的应用中应当去避免这种现象,虽然它暂时不会造成应用崩溃,但是却极大地损坏用户体验;2.ANR触发原因出现ANR之后一个直观的现象就是系统会展示出一个ANR对话框,如图:Android系统中,ActivityManagerService(简称AMS)和WindowManagerService(简称WMS)会检测APP的响应时间,如果AP...原创 2021-10-19 13:56:02 · 9925 阅读 · 1 评论 -
Handler通信机制Message,MessageQueue,Handler,Looper讲解及常见面试问题
1.Handler机制常见问题1)Handler机制基本流程;2)Handler机制都处理哪些类型消息;3)Handler发送和处理消息的方式有哪些种?4)Looper的loop下for循环为什么不会导致ANR?5)处理消息的先后顺序如何控制?6)Looper如何主线程绑定,在其他线程如何使用Looper?7)Message分几种类型,同步和异步?8)Handler设计思路是什么?...原创 2021-10-14 16:33:39 · 786 阅读 · 0 评论 -
Android下NestedScrolling机制与CoordinatorLayout之源码分析
1.CoordinatorLayout依赖库2.Behavior的初始化3.CoordinatorLayout的测量、布局4.CoordinatorLayout中的依赖、监听5.NestedScrolling机制6.CoordinatorLayout的TouchEvent7.小结参考Android CoordinatorLayout之源码解析 - 简书自定义Behavior的艺术探索-仿UC浏览器主页 - 简书...原创 2021-09-22 15:09:37 · 698 阅读 · 0 评论 -
Throwable源码异常分析
问题:Throwable是所有异常的父类,那么异常到底包含哪些信息呢?1.Throwable包含哪些成员变量?public class Throwable implements Serializable { private transient volatile Object backtrace; //异常信息 private String detailMessage; //当前异常是由哪个Throwable所引起的 private Throwable c原创 2021-09-09 18:33:29 · 676 阅读 · 0 评论 -
从字节码的角度来看try-catch-finally和return的执行顺序
从字节码的角度来看try-catch-finally和return的执行顺序全篇以一个例子来说明:先看如下的例子代码:public class ExceptionTest { public void testException(){ try{ inside_try(); } catch(Exception e){ inside_catch(e); } fi原创 2021-09-07 19:28:00 · 175 阅读 · 0 评论 -
Android之Scroller详解讲解-真正了解滚动处理
1.Scroller是什么?Scroller本身不会去移动View,它是一个移动计算辅助类,用于跟踪控件滑动的轨迹,只相当于一个滚动轨迹的记录工具,最终还是通过View的scrollTo,scrollBy方法完成View的移动;2.Scroller源码分析,如何实现滚动轨迹记录的呢?再讲源码之前先了解两个重要的方法:1)startScroll()public void startScroll(int startX, int startY, int dx, int dy, int dur原创 2021-08-23 11:44:00 · 2103 阅读 · 1 评论 -
Android常见内存泄露分析及MAT与Profiler内存分析时间
1.Java内存分配策略Java程序运行时的内存分配策略有三种:静态分配、栈式分配和堆式分配。对应的存储区域如下:静态存储区(方法区):主要存放静态数据、全局static数据和常量。这块内存在程序编译时就已经分配好,并且在程序整个运行期间都存在。 栈区:方法体内的局部变量都在栈上创建,并在方法执行结束时这些局部变量所持有的内存都会自动被释放。 堆区:又称动态内存分配,通常就是指在程序运行时直接new出来的内存。这部分内存在不使用时将会由Java垃圾回收器来负责回收。2.堆与栈的区别栈内存:原创 2021-08-13 22:59:32 · 1063 阅读 · 2 评论 -
用反射的方式获取父类中所有的属性和方法
1.定义父类的属性和方法//父类public class Parent { public String publicField = "1"; String defaultField = "2"; protected String protectedField = "3"; private String privateField = "4"; public void publicMethod(){ System.out.println("pub原创 2021-08-09 16:35:09 · 3819 阅读 · 0 评论 -
Android之使用BottomSheetDialog展示WebView/WheelView等事件冲突处理
问题在用BottomSheetDialog展示WebView/WheelView等滑动控件时,当向下拖动时我们会发现WebView/WheelView等滑动控件无法滑动,BottomSheetDialog向下滑动隐藏关闭了,如下效果:解决问题1.提出设想一般WebView/WheelView的向下滑动/拖动的效果应该是正常显现出来的,而BottomSheetDialog控件本身自带拖动效果也是将其整个View给消失掉的,这两者在同时向下拖动时就会产生部分冲突。(如果没有冲突,那么必定是谷原创 2021-04-04 17:10:51 · 1337 阅读 · 0 评论