
Android面试题
yzpyzp
这个作者很懒,什么都没留下…
展开
-
MVC与MVVM
如果说MVP是对MVC的进一步改进,那么MVVM则是思想的完全变革。它是将“数据模型数据双向绑定”的思想作为核心,因此在View和Model之间没有联系,通过ViewModel进行交互,而且Model和ViewModel之间的交互是双向的,因此视图的数据的变化会同时修改数据源,而数据源数据的变化也会立即反应到View上。MVVM模式在MVP的基础上进一步发展,引入了ViewModel的概念,ViewModel负责将Model层的数据转换为View层可以展示的形式,并处理View层的变化反馈到Model层。原创 2024-10-16 15:28:54 · 518 阅读 · 0 评论 -
TCP Socket通信的数据拷贝过程
Socket通信的数据拷贝过程是怎样的?涉及到几次与内核空间的数据拷贝过程?具体过程是怎样的?原创 2021-02-06 15:07:58 · 2188 阅读 · 0 评论 -
一个完整的HTTP请求过程
参考:一个完整的HTTP请求过程详细原创 2021-01-14 17:17:13 · 192 阅读 · 0 评论 -
Android进程间通信之Binder
Android多进程哪个大型项目不是多进程的?进程间最基本的通信原理你了解多少?进程间通信基本原理进程间通信的原理Binder 的作用Binder 的使用场景Binder 是什么?什么时候需要用到进程间通信?为什么要多进程?进程间通信为什么要用到Binder机制?手机正在运行的进程内存划分包裹发送安卓增加 Binder 的原因性能特点安全性Binder 与传统 IPC 对比传统 IPC 传输数据Binder 传输数据源码分析如何获得另一个进程的原创 2020-12-23 15:47:24 · 1951 阅读 · 0 评论 -
Android Studio, gradle build项目时控制台输出中文乱码信息
Android Studio gradle build项目时,build失败,并且build的控制台输出一大堆中文乱码信息,选了其中一段: -Xlint:unchecked ���±��롣 ����: ����GBK�IJ���ӳ���等等。解决:1.点击工具栏上的放大镜 Search Everywhere 搜索按钮2.全局搜索 Edit Custom VM Options3.在打开的 studio64.exe.vmoptions 文件,文件末尾加入:-Dfile.encoding=UTF-原创 2020-12-17 17:05:25 · 1345 阅读 · 0 评论 -
IOC注入技术之源码时注入技术,Android Studio插件开发
android studio插件1.生成全新的文件2.在已经存在的文件中加入代码参考文档:https://www.w3cschool.cn/intellij_idea_doc/intellij_idea_doc-785d2ea9.html常见AS插件1.GsonFormat快速将json字符串转换成一个Java Bean,免去我们根据json字符串手写对应Java Bean的过程。使用方法:快捷键Alt+S也可以使用Alt+Insert选择GsonFormat2.AndroidButterK原创 2020-12-15 18:06:26 · 285 阅读 · 2 评论 -
IOC注入技术之运行时注入
1.运行时注入, eventBus,springMVC,xUtils2.源码时注入, android studio插件3.编译时注入, butterknife,dagger2需要的基础知识:泛型,反射,注解,与动态代理反射的核心:利用加载到JVM中的字节码获取对象的信息,并调用相关反射API进行创建对象,调用方法等操作。核心思想IOC是一种设计思想与设计模式要区分开IOC是原来由程序代码中主动获取资源的方式,转变为由第三方获取资源并使原来的代码被动接收资源的方式,以达到解耦的效果,称原创 2020-12-14 16:35:27 · 439 阅读 · 0 评论 -
IOC注入技术之编译时注入手写实现Butterknife核心原理
IOC技术主要内容:1.源码时注入: android studio插件2.编译时注入: butterknife,dagger23.运行时注入: xUtils,eventBus,springMVC流行的注入框架:Butterknifehttps://github.com/Krishnasony/ButterKnifeDaggerDagger2https://github.com/square/daggerdaggerAndroid(课后自学)https://dagger.dev/and原创 2020-12-13 18:49:32 · 331 阅读 · 1 评论 -
Android性能优化之内存泄漏OOM与内存优化之LeakCanary原理分析
LeakCanary什么是LeakCanaryLeakCanary 是大名鼎鼎的 square 公司开源的内存泄漏检测工具。目前上大部分App在开发测试阶段都会接入此工具用于检测潜在的内存泄漏问题,做的好一点的可能会搭建一个服务器用于保存各个设备上的内存泄漏问题再集中处理。什么叫内存泄漏?内存溢出?内存溢出(out of memory):是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。内原创 2020-12-08 19:18:11 · 1133 阅读 · 0 评论 -
LeakCanary原理分析
github地址:https://github.com/square/leakcanary简介及使用教程:https://square.github.io/leakcanary/使用在app中的build.gradle中添加:dependencies { debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.2' releaseImplementation 'com.squareup.leakcanary:原创 2020-12-07 18:48:38 · 329 阅读 · 0 评论 -
Android图片加载库Glide源码分析
https://processon.com/view/link/5c84efa7e4b0afc7440bcee8参考:线程池与Glide网络请求并发调度原创 2020-12-06 18:05:19 · 137 阅读 · 0 评论 -
DiskLruCache源码分析
github地址:https://github.com/JakeWharton/DiskLruCache原创 2020-12-04 14:41:13 · 122 阅读 · 0 评论 -
Android进程间通信之Messenger机制
参考:Android夸进程通信机制三:Messenger与MessageAndroid IPC 通信机制之一 Messenger 模式Android Service IPC通信之Messenger机制原创 2020-12-03 14:29:54 · 215 阅读 · 0 评论 -
Android四大组件之ContentProvider
参考:AMS治下的Content Provider执行原理谈谈AMS管理ContentProviderContentProvider在AMS中相关的数据结构原创 2020-12-03 14:30:06 · 102 阅读 · 0 评论 -
ButterKnife基本使用以及源码分析
github地址:https://github.com/JakeWharton/butterknife参考:ButterKnife 原理解析解析ButterKnife实现原理ButterKnife原理以及源代码分析原创 2020-12-01 18:32:15 · 214 阅读 · 0 评论 -
LeakCanary原理分析
github地址:https://github.com/square/leakcanary参考:看完这篇 LeakCanary 原理分析,又可以虐面试官了LeakCanary原理解析LeakCanary 原理分析原创 2020-12-01 18:13:05 · 130 阅读 · 0 评论 -
Android四大组件之Activity——APP进程与系统进程的通信
参考:应用进程与系统进程的通信(IActivityManager & IApplicationThread)原创 2020-12-01 17:32:49 · 193 阅读 · 0 评论 -
Android图片加载库Glide核心功能手写实现
参考:线程池与Glide网络请求并发调度原创 2020-12-01 16:14:52 · 408 阅读 · 0 评论 -
Android图片加载库Glide使用详解
参考:Android图片加载库:最全面解析Glide用法原创 2020-12-01 16:13:40 · 205 阅读 · 0 评论 -
Android进程间通信之Binder原理详解
参考:大佬就是强!意外收获字节跳动内部资料——《Android Binder机制实现原理》,从入门到精通,干货满满原创 2020-12-01 16:11:12 · 103 阅读 · 0 评论 -
Android四大组件之Service
参考:AMS 如何管控 Activity/Service/Broadcast的?Android 四大组件:一份全面 & 简洁的 Service 知识讲解攻略Android中Service启动原理分析一篇文章看明白 Android Service 启动过程关于Android Service真正的完全详解,你需要知道的一切Android Service原理分析之startService(一)...原创 2020-12-01 16:02:52 · 91 阅读 · 0 评论 -
Android线程间通信
1.Handler机制runOnUiThread方法View.post方法2.HandlerThread3.IntentService4.AsyncTask参考:http://developer.android.com/reference/android/os/Handler.htmlhttps://developer.android.google.cn/reference/android/os/Handler.html原创 2020-11-29 16:09:11 · 448 阅读 · 0 评论 -
Android进程间通信
下图引用《Android开发艺术探索》的总结:https://developer.android.google.cn/guide/components/processes-and-threadsAndroid 多进程通信Android多进程实现,一个APP多个进程Android中的多进程模式Android进程间通信 - 几种方式的对比总结Android进程间通信的几种方式...原创 2020-11-29 16:00:04 · 140 阅读 · 0 评论 -
OkHttp原理解析之面试题分析
面试中通常是问些问题考察你对OkHttp的原理是否有深入理解。如何使用OkHttp发送网络请求并将结果更新至UI的方式使用AsyncTask + OkHttp的同步请求使用OkHttp的异步请求+runOnUiThread方法或者Handler可否介绍一下OkHttp的整个异步请求流程OkHttp对于网络请求都有哪些优化,如何实现的OkHttp框架中都用到了哪些设计模式单例模式:(建议用单例模式创建OkHttpClient)OkHttpClient, 可以通过 new OkHttp原创 2020-11-28 19:03:39 · 3149 阅读 · 0 评论 -
OkHttp原理解析之请求服务器拦截器
五、请求服务器拦截器CallServerInterceptor,利用HttpCodec发出请求到服务器并且解析响应生成Response。先讲解一个新的请求头:Expect: 100-continue,这个请求头一般出现于上传大容量请求体或者需要验证服务器是否愿意接收请求体。即代表了客户端需要先询问服务器是否愿意接收请求体数据。OkHttp的做法:如果服务器允许则返回100,客户端继续发送请求体;如果服务器不允许则直接返回给用户。同时服务器也可能会忽略此请求头,一直无法读取应答,此时抛出超时异原创 2020-11-28 17:42:27 · 327 阅读 · 0 评论 -
OkHttp原理解析之连接拦截器
目标:DNS解析SSL握手与加密HTTP代理:普通代理与隧道代理SOCKS代理前置知识分析OkHttp的连接拦截器ConnectInterceptor之前,先来学习预备知识,包括代理和DNS。代理:不使用代理的情况(普通http请求)使用HTTP代理的情况(使用HTTP代理时又分为发送Http请求,发送Https请求的情况)使用SOCKS代理的情况DNSDNS原理下面进行详细讲解。代理普通http请求(即不使用代理)http请求报文:GET /v3/weathe原创 2020-11-28 17:39:25 · 1129 阅读 · 0 评论 -
OkHttp原理解析之缓存拦截器
三、缓存拦截器CacheInterceptor,在发出请求前,先判断是否有命中的缓存。如果命中则可以不发请求,直接使用缓存着的响应(当然要经过一系列的验证来判断这个缓存着的响应是否的确可以直接使用)。 (只会存在Get请求的缓存,Post请求不会被缓存)步骤为:1、从文件缓存中获得对应请求的响应缓存2、创建CacheStrategy ,创建时会判断是否能够使用缓存或发起网络请求,在CacheStrategy 中存在两个成员:networkRequest与cacheResponse,分别代表需要发起网原创 2020-11-28 17:35:33 · 627 阅读 · 0 评论 -
OkHttp原理解析之桥接拦截器
二、桥接拦截器BridgeInterceptor,连接应用程序和服务器的桥梁,我们发出的请求将会经过它的处理才能发给服务器,比如设置请求内容长度,编码,gzip压缩,cookie等,获取响应后保存Cookie等操作。这个拦截器相对比较简单,功能总结起来就是:补全请求与响应后处理。补全请求头:请求头说明Content-Type请求体类型,如:application/x-www-form-urlencoded、multipart/form-dataContent-Length/原创 2020-11-28 17:32:38 · 278 阅读 · 0 评论 -
OkHttp原理解析之重试及重定向拦截器
一、重试及重定向拦截器第一个拦截器:RetryAndFollowUpInterceptor,主要就是完成两件事情:重试与重定向。重试请求阶段发生了 RouteException 或者 IOException会进行判断是否重新发起请求。RouteException:catch (RouteException e) { //todo 路由异常,连接未成功,请求还没发出去 if (!recover(e.getLastConnectException(), streamAllocation,原创 2020-11-28 17:31:21 · 2346 阅读 · 0 评论 -
Android的ServiceManager、SystemServiceManager、SystemServer、SystemService分析
ServiceManager、SystemServiceManager、SystemServer、SystemService十几个比较重要的类,他们之间是什么关系?下面进行源码分析。参考:ServiceManager,SystemServer,SystemServiceManager,SystemService—简述这个几个类的关系Android SystemServiceManager分析...原创 2020-11-24 16:38:28 · 1297 阅读 · 0 评论 -
Android进程保活
1.进程优先级2.保活的原理3.保活的方式当然保活不是绝对保活,只是提高保活率,要想像微信/QQ一样做到绝对保活,必须得联系各个手机厂商加入白名单,否则不可能做到绝对保活。原创 2020-11-23 21:41:39 · 185 阅读 · 0 评论 -
从源码角度分析Handler核心机制
看代码不要什么都看,只需要看主线代码,主线代码逻辑掌握了再选择性的看细节代码。要知道学什么,该学到什么程度,不然就是什么都会一点,什么都不精。规划好路线:1、早点进大厂,评级(需要锻炼技术)2、创业(需要锻炼技术)3、转行一定要确定好边界,不要什么都做,APP开发涉及:Java基础、UI、四大组件、性能优化、NDK、开源框架、架构、数据结构与算法、设计模式等。做APP开发就想办法做好APP开发,不要想着深入研究Linux系统开发,人的精力是有限的,做好一个方向才会精进。...原创 2020-11-21 23:36:03 · 308 阅读 · 1 评论 -
为什么基于TCP的应用需要在应用层加入心跳包机制
TCP协议不是有keep-alive机制吗,那为什么基于TCP的应用还需要自己实现一套心跳包机制?参考:为什么基于TCP的应用需要心跳包(TCP keep-alive原理分析)原创 2020-11-20 17:06:45 · 705 阅读 · 0 评论 -
Android运行时注解和反射技术之事件分发框架EventBus
Android通过仿写EventBus组件通信框架 掌握运行时注解+反射及事件总线通信核心原理原创 2020-11-20 16:14:01 · 449 阅读 · 0 评论 -
Android编译时注解技术之依赖注入框架Butterknife
仿写ButterKnife框架核心功能 掌握编译时注解+注解处理器APT生成Java代码的技术Android进阶系列8-编译时注解框架ButterKnife浅析android手动编写ButterKnife编译时注解框架Android编译时技术的进阶实战打造全自动View注入框架ButterKnife【Android进阶】——编译时技术实战,打造全自动注入框架Butter knife...原创 2020-11-20 16:11:43 · 236 阅读 · 0 评论 -
Java线程与操作系统线程
Java线程在早期的Classic虚拟机上(JDK1.2以前),是基于一种被称为“绿色线程”(Green Threads)的用户线程实现的,但从JDK1.3起,“主流”平台上的“主流”商用Java虚拟机的线程模型普遍都被替换为基于操作系统原生线程模型来实现,即采用1:1的线程模型。操作系统支持怎样的线程模型,在很大程度想会影响上面的Java虚拟机的线程是怎么样映射的,这一点在不同的平台上很难达成一致,因此《Java虚拟机规范》中才不去限定Java线程需要使用哪种线程模型来实现。深入理解JVM(③)线程与原创 2020-11-13 17:47:46 · 165 阅读 · 0 评论 -
OkHttp原理解析
官方地址:https://square.github.io/okhttp/简介:由Square公司贡献的一个处理网络请求的开源项目,是目前Android使用最广泛的网络框架。从Android4.4开始HttpURLConnection的底层实现采用的是OkHttp。特点:支持HTTP/2并允许对同一主机的所有请求共享一个套接字通过连接池,减少了请求延迟默认通过GZip压缩数据响应缓存,避免了重复请求的网络请求失败自动重试主机的其他ip,自动重定向OkHttp原理解析OkHttp 3.1原创 2020-11-12 17:39:12 · 1190 阅读 · 1 评论 -
LinkedHashMap原理及源码解析
参考:图解LinkedHashMap原理原创 2020-11-09 20:56:08 · 305 阅读 · 1 评论 -
Handler.post()、View.post()和Activity.runOnUiThread()
Activity.runOnUiThread和View.post()也是属于线程间通信的方法。原创 2020-11-02 20:47:07 · 393 阅读 · 0 评论 -
Android性能优化—ANR问题分析
Android性能优化—ANR问题分析原创 2020-10-30 17:20:52 · 159 阅读 · 0 评论