首页
首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Android面试锦集
AntDream
创建于2024-05-07
订阅专栏
Android面试的方方面面
等 160 人订阅
共198篇文章
创建于2024-05-07
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
OkHttp3源码解析(二)——拦截器链和缓存策略
上一篇文章中我们介绍了OkHttp3的同步和异步请求流程,我们分析到不论是同步还是异步请求,都是通过RealCall内部的getResponseWithInterceptorChain方法来执行具体的网络连接的,下面我们来分析看看OkHttp3具体是怎么进行网络请求的。 get…
Android多进程之Binder的使用
AIDL中能够使用的List只有ArrayList,但AIDL支持的是抽象的List。因此虽然服务端返回的是CopyOnWriteArrayList,但是在Binder中会按照List的规范去访问数据并最终形成一个新的ArrayList传递给客户端
Android多进程之手动编写Binder类
比如我们要实现当服务端有新书时就通知客户端,也就是观察者模式。我们需要在客户端绑定服务端后绑定监听的接口,还要提供解绑的接口,上面的代码中标记的注释1-6就是扩展Binder类的步骤 所以我们还得增加AIDL接口,同样的我们可以通过编写AIDL文件然后由系统自动生成,也可以手动…
Android 多进程之Messenger的使用
通过上面的实践,我们可以看出利用Messenger进行跨进程通信,需要通过Message来传递消息,而Message可以通过setData方法利用Bundle来传递复杂的数据。
HashMap源码解析
扩容的时候,在将原先的数据重新映射到新数组时,会对原来的链表进行优化。 优化的方式是通过与原数组的容量(为2的倍数)进行与操作,判断高一位是0还是1。如果是0则新的索引不变,比如原来的索引是5,那在新数组里面也放在索引为5的地方;而如果是1,则新的索引为原索引+原数组容量,比如…
Android 设计模式之面向对象的六大原则
我们在App中往往会用到很多的公共方法,比如获取系统的时间,这个功能可能在App中的很多地方都要用到。这个时候我们一般会单独写个工具类TimeUtils,把处理时间有关的方法都放到这个类里面,这样就能减少重复代码,App的结构会更加清晰。当需要添加其他跟时间有关的方法时,就可以…
Android 设计模式之观察者模式
设计模式是一种思想,在应用过程中可以根据具体的需要来实现。RxJava和ListView的Adapter都用到了观察者模式,但实现上肯定会有不一样 想想这样设计遵循了什么设计原则呢?如果忘记了我们前面学得六大原则,可以去复习一下。
Android多线程之常见的线程形态
Andorid中的线程除了传统的Thread外,主要还有AsyncTask、HandlerThread、IntentService。 doInBackground:在线程池中执行,执行具体的异步任务。在这个方法中可以调用publishProgress方法来更新任务的进度 Asy…
Android自定义View之自定义加载进度条(二)
首先我们来解决第一个问题,也就是随着时间更新我们的进度。 其实原理也很简单,上次我们已经提到用Canvas的drawArc方法来绘制进度条,只需要改变绘制的角度就可以。所以我们可以利用时间差值器,在一段时间内让角度从0度变化到360度,也就是完整的一圈了。 这样子的话我们就只需…
OkHttp3源码解析(三)——连接池复用
我们已经分析了OkHttp3的拦截器链和缓存策略,今天我们再来看看OkHttp3的连接池复用。 客户端和服务器建立socket连接需要经历TCP的三次握手和四次挥手,是一种比较消耗资源的动作。Http中有一种keepAlive connections的机制,在和客户端通信结束以…
Android 多线程之阻塞队列
offer(E var1):表示将var1添加到BlockingQueue,如果添加成功返回true,否则返回false。本方法不阻塞当前执行方法的线程 drainTo:一次性从BlockingQueue获取所有可用的对象,还可以指定获取数据的个数。通过该方法可以提升获取数据的…
深入理解Java虚拟机(七)之虚拟机执行子系统
静态方法、私有方法、实例构造器、父类方法以及final方法在类加载的时候就会把符号引用解析为该方法的直接引用。 所有依赖静态类型来定位方法执行版本的分派动作称为静态分派。静态分派发生在编译阶段,典型应用就是方法的重载 在运行期根据实际类型确定方法执行版本的分派过程称为动态分派。…
Fragment中调用startActivityForResult的那些坑
用getParentFragment发起调用,则只有父Activity和父Fragment的onActivityResult会被调用,当前的Fragment的onActivityResult不会被调用。 总结起来就是:从哪里发起调用,最终就会走到哪里。 从上面的方法中可以看出F…
Android 多进程通信之几个基本问题
android:process属性的设置还有另一种方式com.xxq2dream.android_ipc.remote,这种方式的进程是全局进程,其他应用通过ShareUID方式可以和它跑在同一个进程中。
Android多进程之Binder的意外死亡及权限校验
通过前几篇文章,我们对Binder的使用和工作流程有了一定的了解,但是还有几个问题休要我们去解决。一个是如果服务端进程意外退出,Binder死亡,那客户端就会请求失败;还有一个就是权限校验问题,就是服务端需要校验一下客户端的身份权限,不能谁都能请求服务端的服务 从上面的测试我们…
Android多线程之SynchronousQueue源码解析
SynchronousQueue可以实现控制线程先进先出进行排序,也就是先被挂起的线程先被唤醒,这个内部是通过链表来实现的。SynchronousQueue默认是不保证证唤醒的顺序的 SynchronousQueue的不带超时时间的offer和poll方法不会挂起线程,而tak…
Retrofit2源码解析(一)
Retrofit2底层基于OkHttp3,是对利用OkHttp3请求网络的一种封装,可以使我们避免写很多重复的调用网络请求的代码,同时灵活性很高,可以定制自定义的OkHttpClient、自定义的数据解析转换器(比如Gson、Jackson等)、自定义的请求转换器(比如结合Rx…
Android自定义View之双缓冲机制和SurfaceView
CPU访问内存的速度要远远快于访问屏幕的速度。如果需要绘制大量复杂的图像时,每次都一个个从内存中读取图形然后绘制到屏幕就会造成多次地访问屏幕,从而导致效率很低。这就跟CPU和内存之间还需要有三级缓存一样,需要提高效率。 在绘制图像时不用上述一个一个绘制的方案,而采用先在内存中将…
Android自定义View之requestLayout方法和invalidate方法
在View的requestLayout方法中,首先会设置View的标记位,PFLAG_FORCE_LAYOUT表示当前View要进行重新布局,PFLAG_INVALIDATED表示要进行重新绘制。 requestLayout方法中会一层层向上调用父布局的requestLayou…
彻底搞明白Android消息机制
Android中的消息机制主要是指Handler的运行机制,而Handler的运行又离不开Looper和MessageQueue。 MessageQueue用来接收Hnadler发送过来的消息Message,其内部是用单链表的数据结构来存储消息列表的。 MessageQueue…
下一页