![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 96
尘埃zza
搜索关注“开发者营地”公众号,持续分析优质技术文章
展开
-
开发者营地 | Android消息机制详解
一、Handler基础1. Handler简介在Android中使用消息机制,通常就是指Handler机制。Handler是Android消息机制的上层接口。Handler的使用过程很简单,通过它可以轻松地将一个任务切换到Handler所在的线程中去执行。通常情况下,Handler的使用场景就是更新UI。示例:public class Activity extends android.app.Activity { private Handler mHandler = new Handler原创 2021-01-27 10:04:33 · 349 阅读 · 1 评论 -
开发者营地 | Glide: 源码详解
本文聚焦于Glide的源码,基于Glide4.11.0一、简介Glide的GitHubGlide是一个快速高效的Android图片加载库,注重于平滑的滚动。Glide提供了易用的API,高性能、可扩展的图片解码管道(decode pipeline),以及自动的资源池技术。1. 简单使用1、添加依赖:repositories { google() jcenter()}dependencies { implementation 'com.github.bumptech.glid.原创 2020-12-15 10:25:50 · 612 阅读 · 1 评论 -
EventBus:源码详解 | 详细分析EventBus的源码实现
关于EventBus的基本使用已经在《EventBus:基本使用详解》一文中进行了详细的阐述。接下来,通过这篇文章来分析其源码。源码基于eventbus:3.1.1版本首先我们回顾一下主要流程:1.注册订阅EventBus.getDefault().register(this);2.事件处理@Subscribe(threadMode = ThreadMode.MainThread) public void onNewsEvent(NewsEvent event){原创 2020-11-30 22:46:53 · 341 阅读 · 0 评论 -
OkHttp:源码详解|通过源码阐述OkHttp的工作流程和设计思想
源码基于okhttp3 java版本:3.14.x在《OkHttp:基本使用详解》和 《OkHttp:进阶详解》中描述了OkHttp的基本使用方法。自此我们了解了OkHttp的基础使用和了解了使用中设计到的相关概念。接下来我们通过《OkHttp:源码详解》一系列文章从源码的角度来阐述OkHttp的工作流程和设计思想。本系列文章分为六部分OkHttp:源码详解之核心流程(一)OkHttp:源码详解之重试重定向拦截器(二)OkHttp:源码详解之桥拦截器(三)OkHttp:源码详解之缓存拦截器.原创 2020-11-17 15:23:14 · 183 阅读 · 0 评论 -
OkHttp:源码详解之请求服务拦截器(六)
源码基于okhttp3 java版本:3.14.x请求服务拦截器,也就是真正地去进行网络IO读写了——写入http请求的header和body数据、读取响应的header和body。ConnectInterceptor主要介绍了如何寻找连接以及连接池如何管理连接。在获取到连接后,调用了RealConnection的newCodec方法ExchangeCodec实例,然后使用ExchangeCodec实例创建了Exchange实例传入CallServerInterceptor了。ExchangeCo.原创 2020-11-17 15:20:17 · 490 阅读 · 0 评论 -
OkHttp:源码详解之连接拦截器(五)
源码基于okhttp3 java版本:3.14.x前面分析了RetryAndFollowUpInterceptor、BridgeInterceptor、CacheInterceptor,三个拦截器,它们在请求建立连接之前做了一些预处理。请求经过这三个拦截器后,接下要分析剩下的两个拦截器:ConnectInterceptor、CallServerInterceptor,分别负责 连接建立、请求服务读写。本文先分析ConnectInterceptor拦截器。ConnectInterceptor连接拦截.原创 2020-11-17 15:19:38 · 588 阅读 · 0 评论 -
OkHttp:源码详解之缓存拦截器(四)
源码基于okhttp3 java版本:3.14.xCacheInterceptor,缓存拦截器,提供网络请求缓存的存取。合理使用本地缓存,有效地减少网络开销、减少响应延迟。在解析CacheInterceptor源码前,先了解下http的缓存机制:第一次请求:第二次请求:上面两张图很好的解释了http的缓存机制:根据 缓存是否过期、过期后是否有修改 来决定 请求是否使用缓存。详细说明可点击了解 彻底弄懂HTTP缓存机制及原理;CacheInterceptor添加的代码如下:interce.原创 2020-11-17 15:19:01 · 300 阅读 · 0 评论 -
OkHttp:源码详解之桥拦截器(三)
源码基于okhttp3 java版本:3.14.xBridgeInterceptor ,意为 桥拦截器,相当于 在 请求发起端 和 网络执行端 架起一座桥,把应用层发出的请求 变为 网络层认识的请求,把网络层执行后的响应 变为 应用层便于应用层使用的结果。 看代码:public final class BridgeInterceptor implements Interceptor { //Cookie管理器,初始化OkhttpClient时创建的 //默认是CookieJar.NO_CO.原创 2020-11-17 15:18:09 · 107 阅读 · 0 评论 -
OkHttp:源码详解之重试重定向拦截器(二)
源码基于okhttp3 java版本:3.14.x上一篇《OkHttp:源码详解之核心流程(一)》文章详细的描述了OkHttp发起一个请求的整体流程,详细读者已经对整体流程有一个较为清晰的认知。接下来我们开始依次分析5个系统添加的拦截器,通过这5个拦截器的分析,掌握OkHttp是如何进行一次真正的网络请求。如果请求创建时没有添加应用拦截器,那么第一个拦截器就是RetryAndFollowUpInterceptor,意为“重试和重定向拦截器”,作用是连接失败后进行重试、对请求结果跟进后进行重定向。通.原创 2020-11-17 15:17:21 · 431 阅读 · 0 评论 -
OkHttp:源码详解之核心流程(一)
源码基于okhttp3 java版本:3.14.xOkHttp整体架构:首先,我们回顾一下基本的okhttp请求流程:Get异步请求: private void asynchronousGetRequests() { String url = "https://wwww.baidu.com"; OkHttpClient okHttpClient = new OkHttpClient(); final Request request = new R.原创 2020-11-17 15:16:06 · 307 阅读 · 0 评论 -
OkHttp:进阶详解
在《OkHttp:基本使用详解》中描述了OkHttp的基本使用方法。已掌握了如何使用OkHttp进行基本的网络请求,但这只是最基础的使用,想要在实际的开发项目中应用我们还需知道OkHttp的底层实现方式。本文《OkHttp:进阶详解》主要详细的描述OkHttp的在设计和使用时涉及到的相关概念,为后续阅读源码打下基础。接下来通过《OkHttp:源码详解》一系列文章分析源码。一、CallHTTP客户端的工作是接受网络请求并产生其响应。请求每个HTTP请求都包含一个URL,一个方法(如GET或POST原创 2020-11-17 15:14:36 · 711 阅读 · 0 评论 -
Android屏幕适配方案详解之今日头条方案和SmallestWidth
一、基础知识px是真实像素单位,Pixel像素,不同手机的分辨率可能不同,比如一个100*100像素的控件在分辨率越来越高的手机上会在整体UI中看起来越来越小。**dp **(dip)指的是设备独立像素,在不同分辨率和尺寸的手机上代表了不同的真实像素,比如在分辨率较低的手机中,可能1dp=1px,而在分辨率较高的手机中,可能1dp=2px,这样的话,一个100*100dp的控件,在不同的手机中就能表现出差不多的大小了。dpi是像素密度,指的是在系统软件上指定的单位尺寸(英寸)的像素数量,它往往是写在系原创 2020-10-29 16:03:26 · 1352 阅读 · 1 评论 -
Android10源码AOSP(从Ubuntu14.04环境搭建到下载编译运行)
Ubuntu14.04环境搭建电脑为笔记本,CPU i7-10750H,16G内存虚拟机使用VMware Workstation 15 Pro操作系统为Ubuntu 64 位 14.04AOSP比较大,安装虚拟机的时候预留250G+的空间,8G内存。具体的安装请自行进行。根据你要编译的系统版本,选择相应的 Ubuntu版本:Android 6.0 (Marshmallow) – AOSP master:Ubuntu 14.04 (Trusty)Android 2.3.x (Gingerbre原创 2020-06-16 13:57:30 · 2909 阅读 · 0 评论 -
Android10源码下载与编译(Mac移动硬盘)
创建区分大小写的磁盘映像Mac系统默认磁盘,文件系统运行不区分大小写。Git 并不支持此类文件系统,而且此类文件系统会导致某些 Git 命令(例如 git status)的行为出现异常。因此,建议始终在区分大小写的文件系统中对 AOSP 源文件进行操作。有两种方式可以创建磁盘映像,具体操作如下:由于AOSP比较大,但是我们存放在移动硬盘上,更大的空间能够更好地满足未来的需求,所以预留200G...原创 2020-04-23 19:32:42 · 2045 阅读 · 0 评论 -
Android开发艺术探索笔记
《Android开发艺术探索》这本书在几年前就已经买了,陆陆续续看过几次,都没有看完,没有理解透。最近重读《Android开发艺术探索》,读了两次,第一次读完感觉还有大量的知识点没有理解,再次阅读,练习书中例子,记读书笔记,理解加深了几分。[学习笔记]Android开发艺术探索:Activity的生命周期和启动模式[学习笔记]Android开发艺术探索:IPC机制[学习笔记]A...原创 2020-03-13 16:57:05 · 301 阅读 · 0 评论 -
[学习笔记]Android开发艺术探索:Android性能优化
Android设备作为一种移动设备,不管是内存还是CPU的性能都受到了一定的限制,也意味着Android程序不可能无限制的使用内存和CPU资源,过多的使用内存容易导致OOM,过多的使用CPU资源容易导致手机变得卡顿甚至无响应(ANR)。这也对开发人员提出了更高的要求。本章主要介绍一些有效的性能优化方法。主要包括布局优化、绘制优化、内存泄漏优化、响应速度优化、ListView优化、Bitmap优化...原创 2020-03-13 16:44:57 · 196 阅读 · 0 评论 -
[学习笔记]Android开发艺术探索:综合技术(Crash、Multidex、动态加载、反编译)
使用CrashHandler来获取应用的crash信息检测崩溃并了解详细的crash信息:首先需实现一个uncaughtExceptionHandler对象,在它的uncaughtException方法中获取异常信息并将其存储到SD卡或者上传到服务器中,然后调用Thread的setDefaultUncaughtExceptionHandler为当前进程的所有线程设置异常处理器。public ...原创 2020-03-13 16:43:41 · 224 阅读 · 0 评论 -
[学习笔记]Android开发艺术探索:Bitmap的加载和Cache
Bitmap的高效加载BitmapFactory类提供四种方法:decodeFile、decodeResource、decodeStream和decodeByteArray;其中decodeFile和decodeResource间接的调用了decodeStream方法;这四个方法最终在Android底层实现。如何高效的加载Bitmap?核心思想:按需加载;很多时候ImageView并没有原始图...原创 2020-03-13 16:42:04 · 267 阅读 · 0 评论 -
[学习笔记]Android开发艺术探索:Android的线程和线程池
在Android系统,线程主要分为主线程和子线程,主线程处理和界面相关的事情,而子线程一般用于执行耗时操作。在Android中,线程的形态有很多种: i. AsyncTask封装了线程池和Handler。 ii. HandlerThread是具有消息循环的线程,内部可以使用handler iii. IntentService是一种Service,内部采用HandlerThread来执...原创 2020-03-13 16:40:41 · 149 阅读 · 1 评论 -
[学习笔记]Android开发艺术探索:Android的消息机制
从开发的角度来说,Handler是Android消息机制的上层接口。Handler的运行需要底层的 MessageQueue 和 Looper 的支撑。MessageQueue是一个消息队列,内部存储了一组消息,以队列的形式对外提供插入和删除的工作,内部采用单链表的数据结构来存储消息列表。Lopper会以无限循环的形式去查找是否有新消息,如果有就处理消息,否则就一直等待着。 线程是默认没有L...原创 2020-03-13 16:39:42 · 134 阅读 · 0 评论 -
[学习笔记]Android开发艺术探索:四大组件的工作过程之ContentProvider
ContentProvider是一个内存共享型组件,他通过Binder向其他组件乃至其他应用提供数据,当ContentProvider所在的进程启动的时候,ContentProvider会同时启动并且发布到AMS中,需要注意的是,这个时候ContentProvider的onCreate要先于Application的onCreate执行,这是四大组件一个少有的现象一个应用启动的时候,入口方法在Ac...原创 2020-03-13 16:37:37 · 154 阅读 · 0 评论 -
[学习笔记]Android开发艺术探索:四大组件的工作过程之BoradcastReceiver
广播的注册过程静态注册:在应用的安装时由系统自动完成注册,具体来说是PMS(PackageManagerServer)来完成整个注册过程。其他三大组件也是。动态注册:从ContentWrapper的registerReceiver方法开始, 调用了自己的registerReceiverInternal方法。 private Intent registerReceiverInternal(B...原创 2020-03-13 16:36:18 · 160 阅读 · 0 评论 -
[学习笔记]Android开发艺术探索:四大组件的工作过程之Service
Service有两种工作状态:启动状态:执行后台计算绑定状态:用于其他组件与Service交互Service的启动过程Service的启动从 ContextWrapper 的 startService 开始在ContextWrapper中,大部分操作通过一个 ContextImpl 对象mBase实现/frameworks/base/core/java/android/conten...原创 2020-03-13 16:34:39 · 135 阅读 · 0 评论 -
[学习笔记]Android开发艺术探索:四大组件的工作过程之Activity
Activity是一种展示型组件,用于向用户直接地展示一个界面,并且可以接收用户的输入 信息从而进行交互,扮演的是一个前台界面的角色。Service是一种计算型组件,在后台执行一系列计算任务。它本身还是运行在主线程中 的,所以耗时的逻辑仍需要单独的线程去完成。BroadcastReceiver是一种消息型组件,用于在不同的组件乃至不同的应用之间传递消 息。ContentPro...原创 2020-03-13 16:33:28 · 209 阅读 · 0 评论 -
[学习笔记]Android开发艺术探索:理解Window和WindowManager
Window是一个抽象类,具体实现是 PhoneWindow 。不管是 Activity 、 Dialog 、 Toast 它们的视图都是附加在Window上的,因此Window实际上是View的直接管理者。 WindowManager 是外界访问Window的入口,通过WindowManager可以创建Window,而 Window的具体实现位于 WindowManagerService 中,W...原创 2020-03-13 16:30:56 · 156 阅读 · 0 评论 -
[学习笔记]Android开发艺术探索:动画深入分析
Android动画分为三种: View动画、帧动画、属性动画View动画View动画的作用对象是View,支持四种动画效果:平移 、缩放、旋转、透明。四种变换效果对应着Animation四个子类: TranslateAnimation 、 ScaleAnimation 、 RotateAnimation 和 AlphaAnimation 。这四种动画皆可以通过XML定义,也可以通过代码来动态...原创 2020-03-13 16:29:33 · 185 阅读 · 0 评论 -
[学习笔记]Android开发艺术探索:Android的Drawable
6.1 Drawable简介Drawable表示的是一种可以在Canvas上进行绘制的抽象概念,它的种类有很多,最常见的就是颜色和图片。优点:使用简单,比自定义View成本低很多,非图片类型的Drawable占用空间较小。全面理解Drawable的使用细节还是很有必要的,这也是本章的出发点。Drawable有很多种,都表示图像的概念,但不全是图片。Drawable是所有Drawable对象...原创 2020-03-13 16:27:30 · 119 阅读 · 0 评论 -
[学习笔记]Android开发艺术探索:View的工作原理
初识ViewRoot和DecorViewViewRoot的实现是 ViewRootImpl 类,是连接WindowManager和DecorView的纽带, View的三大流程(mearsure、layout、draw)均是通过ViewRoot来完成。当Activity对象被创建完毕后,会将DecorView添加到Window中,同时创建 ViewRootImpl 对象,并将 ViewRootI...原创 2020-03-13 16:18:19 · 132 阅读 · 0 评论 -
[学习笔记]Android开发艺术探索:View的事件体系
[学习笔记]Android开发艺术探索:View的事件体系View基础知识View是Android所有控件的基类;View是一种界面层的控件的一种抽象,代表了一个控件;ViewGroup继承自View。View的位置主要由它的四个定点来决定,分别对应View的四个属性:top、left、right、bottom,这下坐标都是相对父容器而言的。获取方式getXXX()。从3.0开始View增...原创 2020-03-13 16:16:33 · 151 阅读 · 0 评论 -
[学习笔记]Android开发艺术探索:IPC机制
Android IPC简介IPC为进程间通讯,两个进程之间进行数据交换的过程。IPC不是Android所独有的,任何一个操作系统都有对应的IPC机制。Windows上通过剪切板、管道、油槽等进行进程间通讯。Linux上通过命名空间、共享内容、信号量等进行进程间通讯。Android中没有完全继承于Linux,有特色的进程间通讯方式是Binder,还支持Socket。Android中的多进程模式...原创 2020-03-13 16:13:13 · 266 阅读 · 0 评论 -
[学习笔记]Android开发艺术探索笔记:Activity的生命周期和启动模式
Activity 生命周期的全面分析典型情况下的生命周期分析onCreate : 生命周期第一个方法,可做一些初始化工作;onRestart : Activity 重新启动,由不可见变为可见;onStart : Activity 正在启动,此时 Activity 已经可见,但没有出现在前台,还无法和用户交互;onResume : Activity 可见,出现在前台,并开始活动;onP...原创 2020-03-13 16:07:11 · 272 阅读 · 0 评论 -
Android Alarm机制分析
从应用层到内核层,简单分析Android Alarm的工作流程。基于Android 4.4和Kernel 2.6.39。原创 2020-02-18 10:08:09 · 1601 阅读 · 0 评论 -
EventBus:基本使用详解
简介EventBus项目:https://github.com/greenrobot/EventBusEventBus 3.0.0 API:http://greenrobot.org/files/eventbus/javadoc/3.0/EventBus是一种用于Android/Java的事件发布-订阅总线框架。特点:简化组件之间的通信分离事件发送者和接收者很好地处理A...原创 2020-01-06 19:25:43 · 1793 阅读 · 1 评论 -
[学习笔记] Android群英传:Android体系与系统架构和ADB常用命令
Android体系与系统架构 1. Dalvik:在运行时编译 ART:安装时就进行编译 2. Activity、Service、Application都是继承自Context,在创建Activity、Service、Application的时候创建Context 3. android系统目录/system/app/ ——-系统app/system/bin/ ...原创 2018-03-27 10:40:22 · 181 阅读 · 0 评论 -
[学习笔记] Android群英传:Android Scroll分析
一.滑动效果的产生1.Android坐标系在Android,系统将屏幕最左上角的顶点作为Android坐标系的原点,从这个点向右是X轴正方向,从这个点向下是Y轴正方向,如图系统提供了getLocationOnScreen(intlocation[])来获取Android坐标中的位置,即该视图左上角Android的坐标,另外,在触摸事件中使用getRawX(),getRawY()...原创 2018-04-09 16:30:23 · 206 阅读 · 0 评论 -
[学习笔记] Android群英传:ListView 使用技巧
一.Listview常用优化技巧1.使用ViewHolder模式提高效率ViewHolder模式利用了ListView的视图缓存机制,避免每次调用getView()的时候去通过findViewById()实例化控件,需要在自定义的Adapter里面定义一个内部类ViewHolder即可,代码如下: public final class ViewHolder{ ...原创 2018-04-09 16:29:25 · 218 阅读 · 0 评论 -
[学习笔记] Android群英传:Android控件架构与自定义控件
Android控件架构View树结构 UI界面框架 标准视图树 View的测量MeasureSpec类,通过他来帮助我们测量View, MeasureSpec是一个32位的int值,其中高2位为测量模式,低30为测量的大小,在计算中使用位运算时为了提高并且优化效率测量模式EXACTLY:具体值和match_parentAT_MOST:wrap_pare...原创 2018-03-30 10:03:37 · 181 阅读 · 0 评论 -
在Andorid中使用FFmpeg实现YUV解码为BMP
在Andorid中使用FFmpeg实现YUV解码为BMP最进根据公司项目需要,学习FFmpeg音视频编解码做技术储备,项目是运行在android平台上的,现在需求还不确定,可能需要YUV解码为BMP。原创 2017-09-06 19:40:13 · 695 阅读 · 0 评论 -
在Andorid中使用FFmpeg实现YUV编码为MP4
在Andorid中使用FFmpeg实现YUV编码为MP4最进根据公司项目需要,学习FFmpeg音视频编解码做技术储备,项目是运行在android平台上的,现在需求还不确定,可能需要YUV编码为MP4。原创 2017-09-05 20:01:27 · 2574 阅读 · 0 评论 -
第一行代码Android学习(四)
第一行代码Android学习:第四部分主要涉及到碎片的简单使用、动态添加碎片、在碎片中模拟返回栈、碎片和活动之间相互通信和碎片的生命周期原创 2016-08-15 16:48:00 · 370 阅读 · 0 评论