![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android面试题
文章平均质量分 86
面试相关
打架不行的二哈
点点关注,点个赞,会让作者元气满满的哦
展开
-
View的生命周期
View简单介绍This class represents the basic building block for user interface components. A Viewoccupies a rectangular area on the screen and is responsible for drawing and event handling.View是屏幕上的一块矩形区域,负责界面的绘制与触摸事件的处理,它是一种界面层控件的抽象,所有的控件都继承自View。View是And原创 2021-12-08 15:50:39 · 3169 阅读 · 1 评论 -
Android代码混淆
混淆简介代码混淆(Obfuscated code)是将程序中的代码以某种规则转换为难以阅读和理解的代码的一种行为。混淆的好处令 APK 难以被逆向工程,即很大程度上增加反编译的成本;在打包时移除无用资源,显著减少 APK 体积;对字节码进行优化,移除无用指令,应用运行更快;以变通方式避免 Android 中常见的 64k 方法数引用的限制。Android 当中的混淆在 Android 中,我们平常所说的"混淆"其实有两层意思,一个是 Java 代码的混淆,另外一个是资源的压缩。其实这两者原创 2021-11-22 15:41:28 · 2239 阅读 · 0 评论 -
Android View绘制13问13答
1.View的绘制流程分几步,从哪开始?哪个过程结束以后能看到view?从ViewRoot的performTraversals开始,经过measure,layout,draw 三个流程。draw流程结束以后就可以在屏幕上看到view了。2.view的测量宽高和实际宽高有区别吗?基本上百分之99的情况下都是可以认为没有区别的。有两种情况,有区别。第一种 就是有的时候会因为某些原因 view会多次测量,那第一次测量的宽高 肯定和最后实际的宽高 是不一定相等的,但是在这种情况下最后一次测量的宽高和实际宽高转载 2021-11-17 15:28:39 · 216 阅读 · 0 评论 -
Fragment相关面试题
1、在fragment中为什么有时getActivity()会为null?Fragment 的 getActivity() 会在 onDetach 之后释放持有的 Activity,因而返回了 null。2、Fragment为什么有的时候会重叠,怎么产生的,又如何解决?一般满足下面2个条件才可能会发生重叠:发生了页面重启(旋转屏幕、内存不足等情况被强杀重启);系统在页面重启前,帮我们保存了Fragment的状态,但是在重启后恢复时,视图的可见状态没帮我们保存,而Fragment默认的是sho原创 2021-11-17 14:37:51 · 896 阅读 · 0 评论 -
Android MMKV使用及原理分析
什么是MMKVMMKV——基于 mmap 的高性能通用 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。MMKV 是基于 mmap 内存映射的移动端通用 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从 2015 年中至今,在 iOS 微信上使用已有近 3 年,其性能和稳定性经过了时间的验证。近期已移植到 Android 平台。在腾讯内部开源半年之后,得到公司内部团队的广泛应用和一致好评。通过 mmap原创 2021-11-12 17:02:24 · 1245 阅读 · 0 评论 -
Handler同步屏障机制
前言同步屏障机制是一套为了让某些特殊的消息得以更快被执行的机制。这里我们假设一个场景:我们向主线程发送了一个UI绘制操作Message,而此时消息队列中的消息非常多,那么这个Message的处理可能会得到延迟,绘制不及时造成界面卡顿。同步屏障机制的作用,是让这个绘制消息得以越过其他的消息,优先被执行。MessageQueue中的Message,有一个变量isAsynchronous,他标志了这个Message是否是异步消息;标记为true称为异步消息,标记为false称为同步消息。同时还有另一个变量t转载 2021-11-11 14:43:10 · 339 阅读 · 0 评论 -
Binder相关面试题
1、Android中进程和线程的关系,区别进程可以认为是程序执行时的一个实例。进程是系统进行资源分配的独立实体, 且每个进程拥有独立的地址空间。一个进程无法直接访问另一个进程的变量和数据结构, 如果希望让一个进程访问另一个进程的资源,需要使用进程间通信,比如:管道,文件, 套接字等。一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。 线程与进程的一个主要区别是,同一进程内的多个线程会共享部分状态, 多个线程可以读写同一块内存(一个进程无法直接访问另一进程的内存)。同时, 每个线程还拥有自己的寄存原创 2021-11-10 16:40:15 · 3138 阅读 · 8 评论 -
WebView相关面试题
1、如何提高WebView加载速度美团技术分享WebView启动过程大概分为以下几个阶段:App中打开WebView的第一步并不是建立连接,而是启动浏览器内核。优化手段围绕着以下两个点进行:预加载WebView。加载WebView的同时,请求H5页面数据。常见的方法是全局WebView,在客户端刚启动时,就初始化一个全局的WebView待用,并隐藏;这种方法可以比较有效的减少WebView在App中的首次打开时间。当用户访问页面时,不需要初始化WebView的时间。当然这也带来原创 2021-11-09 17:38:31 · 2774 阅读 · 0 评论 -
Android常用开源组件探索-OkHttp(2)原理详解
1、概述OkHttp 是 Square 公司开源的一款网络框架,一般和 Retrofit、RxJava 或协程一起使用。OkHttp 支持发起同步请求和异步请求,同步请求对应类的是 RealCall ,异步请求对应的是 AsyncCall ,AsynCall 是 RealCall 的内部类。RealCall 和 AsyncCall 可以理解为同步请求操作和异步请求操作。当用 RealCall 的 execute() 方法发起同步请求时,请求会被请求分发器 Dispatcher 放到同步请求操作队列中,原创 2021-10-26 15:38:07 · 1513 阅读 · 0 评论 -
Java动态代理
1、概述1.1 什么是代理我们都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品。关于微商代理,首先我们从他们那里买东西时通常不知道背后的厂家究竟是谁,也就是说,“委托者”对我们来说是不可见的;其次,微商代理主要以朋友圈的人为目标客户,这就相当于为厂家做了一次对客户群体的“过滤”。我们把微商代理和厂家进一步抽象,前者可抽象为代理类,后者可抽象为委托类(被代理类)。通过使用代理,通常有两个优点,并且能够分别与我们提到的微商代理的两个特点对应起来:优点一:可以隐藏委托类的实现;原创 2021-10-25 17:18:13 · 108 阅读 · 0 评论 -
AMS相关面试题
1、ActivityManagerService是什么?什么时候初始化的?有什么作用?ActivityManagerService 主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块类似。ActivityManagerService进行初始化的时机很明确,就是在SystemServer进程开启的时候,就会初始化ActivityManagerService。(系统启动流程)如果打开一个App的话,需要AMS去通知zygote进程, 所有的Acti原创 2021-10-08 19:26:28 · 1549 阅读 · 0 评论 -
Android相关面试题
1、Activity的startActivity和Context的startActivity区别?从Activity中启动新的Activity时可以直接mContext.startActivity(intent)就好如果从其他Context中启动Activity则必须给intent设置Flag:intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) ; mContext.startActivity(intent);2、Android为什么引入Parcel原创 2021-09-13 15:26:28 · 126 阅读 · 0 评论 -
Bitmap相关面试题
1、Bitmap 内存占用的计算占用的内存 = width * height * nTargetDensity/inDensity * nTargetDensity/inDensity * 一个像素所占的内存。ARGB_8888: 每个像素4字节. 共32位,默认设置。Alpha_8: 只保存透明度,共8位,1字节。ARGB_4444: 共16位,2字节。RGB_565:共16位,2字节,只存储RGB值。2、getByteCount() & getAllocationByteCo原创 2021-08-03 10:22:05 · 627 阅读 · 0 评论 -
View事件分发相关面试题
1、View事件分发机制对屏幕的点击,滑动,抬起等一系的动作都是由一个一个MotionEvent对象组成的。根据不同动作,主要有以下三种事件类型:ACTION_DOWN:手指刚接触屏幕,按下去的那一瞬间产生该事件ACTION_MOVE:手指在屏幕上移动时候产生该事件ACTION_UP:手指从屏幕上松开的瞬间产生该事件从ACTION_DOWN开始到ACTION_UP结束我们称为一个事件序列。正常情况下,无论你手指在屏幕上有多么骚的操作,最终呈现在MotionEvent上来讲无外乎下面两种:原创 2021-07-30 15:36:15 · 1728 阅读 · 0 评论 -
Handler相关面试题
1、消息是如何添加到队列的handler 发送一个message 时,会调用sendMessage等方法,这些方法中最终都会调用 Handler 中的 enqueueMessage 方法,我们看一下 enqueueMessage 方法做了什么://Handlerprivate boolean enqueueMessage(@NonNull MessageQueue queue, @NonNull Message msg, long uptimeMillis) { //...原创 2021-04-27 11:21:03 · 511 阅读 · 0 评论 -
BroadcastReceiver相关面试题
1、广播的分类和使用场景分类:标准广播标准广播(normal broadcasts)是一种完全异步执行的广播,在广播发出之后,所有的BroadcastReceiver几乎都会在同一时刻接收到收到这条广播消息,因此它们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。有序广播有序广播(ordered broadcasts)是一种同步执行的广播,在广播发出之后,同一时刻只会有一个BroadcastReceiver能够收到这条广播消息,当这个BroadcastRecei原创 2021-07-28 10:50:13 · 421 阅读 · 0 评论 -
MVC & MVP & MVVM相关面试题
1、MVC及其优缺点MVC是模型(model)-视图(view)-控制器(controller)的缩写,用一种业务逻辑、数据、界面显示分离的方法组织代码。其中M层处理数据,业务逻辑等;V层处理界面的显示结果;C层起到桥梁的作用,来控制V层和M层通信以此来达到分离视图显示和业务逻辑层。其实Android app的界面开发部分已经是遵从MVC模式的:视图层(View):主要包括一下View及ViewGroup控件,可以是系统控件也可以是自定义控件。控制层(Controller):Android的控制原创 2021-07-27 16:22:51 · 1824 阅读 · 2 评论 -
Service相关面试题
1、service 的生命周期,两种启动方式的区别startServiceService的生命周期:onCreate() --> onStart() -> onDestroy()停止服务:service.stopService()bindServiceService的生命周期 onCreate() --> onBind() --> onUnBind() --> onDestroy()停止服务:UnbindService()再StopService()当app原创 2021-07-27 15:17:18 · 683 阅读 · 0 评论 -
Activity相关面试题
1、Activity的启动流程Activity 启动主要涉及到3个进程:系统进程 SystemServer (负责管理整个framework,是Zygote孵化的第一个进程)App进程(App进程是用户点击桌面icon时,通过Launcher进程请求SystemServer,再调用Zygote孵化的)Zygote进程(所有进程孵化都由Zygote完成,而Zygote是init进程的子进程,也由init进程孵化)如果点击桌面icon启动还会涉及到 Launcher进程(Zygote孵化的第一个应用原创 2021-07-26 15:27:46 · 3288 阅读 · 0 评论