自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

尘埃zza的博客

搜索关注“开发者营地”公众号,持续分析优质技术文章

  • 博客(160)
  • 资源 (28)
  • 收藏
  • 关注

原创 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 2812

原创 在Windows上编译 CEF3 且加入mp3/mp4的支持

现在因为工作需要,为了得到支持mp3、mp4的cef32和64位版本,需要编译cef3,本次编译版本是3239(6.0.3239.132)。

2020-04-23 12:32:15 13144 19

原创 开发者营地 | 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 337 1

原创 剑指offer:中等部分

剑指offer:中等部分[001] 求1+2+…+n求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45限制:1 <= n <= 10000方法一:平均计算问题: 此计算必须使用 乘除法 ,因此本方法不可取。public int sumNums(int n) { return (1 + n)

2020-12-22 11:49:08 413

原创 开发者营地 | 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 585 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 281

原创 Java设计模式完全解析

《Head First 设计模式》读书备忘笔记,整合了一些网上资料,记录了所有常见的算法模式实现的示例。适合有一定Java基础和设计模式的读者,若无基础建议先看《Head First 设计模式》,是一本很好的入门资料。设计原则:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。设计原则:针对接口编程,而不是针对实现编程。设计原则:多用组合,少用继承。设计原则:为了交互对象之间的松耦合设计而努力。设计原则:类应该对扩展开放,对修改关闭。设计原则

2020-11-18 23:24:48 264

原创 剑指offer:简单部分

[001] 左旋转字符串字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = "abcdefg", k = 2输出: "cdefgab"示例 2:输入: s = "lrloseumgh", k = 6输出: "umghlrlose"限制:1 <= k < s.length <= 10000方

2020-11-18 11:05:51 337

原创 OkHttp:源码详解|通过源码阐述OkHttp的工作流程和设计思想

源码基于okhttp3 java版本:3.14.x在《OkHttp:基本使用详解》和 《OkHttp:进阶详解》中描述了OkHttp的基本使用方法。自此我们了解了OkHttp的基础使用和了解了使用中设计到的相关概念。接下来我们通过《OkHttp:源码详解》一系列文章从源码的角度来阐述OkHttp的工作流程和设计思想。本系列文章分为六部分OkHttp:源码详解之核心流程(一)OkHttp:源码详解之重试重定向拦截器(二)OkHttp:源码详解之桥拦截器(三)OkHttp:源码详解之缓存拦截器.

2020-11-17 15:23:14 174

原创 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 461

原创 OkHttp:源码详解之连接拦截器(五)

源码基于okhttp3 java版本:3.14.x前面分析了RetryAndFollowUpInterceptor、BridgeInterceptor、CacheInterceptor,三个拦截器,它们在请求建立连接之前做了一些预处理。请求经过这三个拦截器后,接下要分析剩下的两个拦截器:ConnectInterceptor、CallServerInterceptor,分别负责 连接建立、请求服务读写。本文先分析ConnectInterceptor拦截器。ConnectInterceptor连接拦截.

2020-11-17 15:19:38 550

原创 OkHttp:源码详解之缓存拦截器(四)

源码基于okhttp3 java版本:3.14.xCacheInterceptor,缓存拦截器,提供网络请求缓存的存取。合理使用本地缓存,有效地减少网络开销、减少响应延迟。在解析CacheInterceptor源码前,先了解下http的缓存机制:第一次请求:第二次请求:上面两张图很好的解释了http的缓存机制:根据 缓存是否过期、过期后是否有修改 来决定 请求是否使用缓存。详细说明可点击了解 彻底弄懂HTTP缓存机制及原理;CacheInterceptor添加的代码如下:interce.

2020-11-17 15:19:01 263

原创 OkHttp:源码详解之桥拦截器(三)

源码基于okhttp3 java版本:3.14.xBridgeInterceptor ,意为 桥拦截器,相当于 在 请求发起端 和 网络执行端 架起一座桥,把应用层发出的请求 变为 网络层认识的请求,把网络层执行后的响应 变为 应用层便于应用层使用的结果。 看代码:public final class BridgeInterceptor implements Interceptor { //Cookie管理器,初始化OkhttpClient时创建的 //默认是CookieJar.NO_CO.

2020-11-17 15:18:09 105

原创 OkHttp:源码详解之重试重定向拦截器(二)

源码基于okhttp3 java版本:3.14.x上一篇《OkHttp:源码详解之核心流程(一)》文章详细的描述了OkHttp发起一个请求的整体流程,详细读者已经对整体流程有一个较为清晰的认知。接下来我们开始依次分析5个系统添加的拦截器,通过这5个拦截器的分析,掌握OkHttp是如何进行一次真正的网络请求。如果请求创建时没有添加应用拦截器,那么第一个拦截器就是RetryAndFollowUpInterceptor,意为“重试和重定向拦截器”,作用是连接失败后进行重试、对请求结果跟进后进行重定向。通.

2020-11-17 15:17:21 406

原创 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 293

原创 OkHttp:进阶详解

在《OkHttp:基本使用详解》中描述了OkHttp的基本使用方法。已掌握了如何使用OkHttp进行基本的网络请求,但这只是最基础的使用,想要在实际的开发项目中应用我们还需知道OkHttp的底层实现方式。本文《OkHttp:进阶详解》主要详细的描述OkHttp的在设计和使用时涉及到的相关概念,为后续阅读源码打下基础。接下来通过《OkHttp:源码详解》一系列文章分析源码。一、CallHTTP客户端的工作是接受网络请求并产生其响应。请求每个HTTP请求都包含一个URL,一个方法(如GET或POST

2020-11-17 15:14:36 647

原创 Leetcode热题100:简单部分

[001] 合并二叉树给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入: Tree 1 Tree 2 1 2

2020-11-09 19:12:47 410

原创 Android屏幕适配方案详解之今日头条方案和SmallestWidth

一、基础知识px是真实像素单位,Pixel像素,不同手机的分辨率可能不同,比如一个100*100像素的控件在分辨率越来越高的手机上会在整体UI中看起来越来越小。**dp **(dip)指的是设备独立像素,在不同分辨率和尺寸的手机上代表了不同的真实像素,比如在分辨率较低的手机中,可能1dp=1px,而在分辨率较高的手机中,可能1dp=2px,这样的话,一个100*100dp的控件,在不同的手机中就能表现出差不多的大小了。dpi是像素密度,指的是在系统软件上指定的单位尺寸(英寸)的像素数量,它往往是写在系

2020-10-29 16:03:26 1285 1

原创 LeeCode 算法(Java实现)系列汇总

LeeCode 算法,使用Java实现,在这里做一个记录。现在更新到160题,其中绝大部分是简单难度,按通过率从高到低进行学习的。这部分先告一段落,更新Hot100题库和剑指offer题库,这两个题库学习完成后,会继续更新该部分。Leetcode数据结构与算法(一)Leetcode数据结构与算法(二)Leetcode数据结构与算法(三)Leetcode数据结构与算法(四)Leetcode数据结构与算法(五)Leetcode数据结构与算法(六)Leetcode数据结构与算法(七)Leetc

2020-10-29 15:55:30 1038

原创 Leetcode数据结构与算法(十)

[0145] 斐波那契数斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.给定 N,计算 F(N)。示例 1:输入:2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1.示例 2:输入:3输出:2解释:F(3) = F(2) + F(1) = 1 +

2020-10-29 15:36:25 165

原创 Leetcode数据结构与算法(九)

[0129] 二叉树的层次遍历 II给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[ [15,7], [9,20], [3]]方法一:BFS/** * Definition for a binary tree node. * public cla

2020-10-29 15:35:25 213

原创 Leetcode数据结构与算法(八)

[0113] 转置矩阵给定一个矩阵 A, 返回 A 的转置矩阵。矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。示例 1:输入:[[1,2,3],[4,5,6],[7,8,9]]输出:[[1,4,7],[2,5,8],[3,6,9]]示例 2:输入:[[1,2,3],[4,5,6]]输出:[[1,4],[2,5],[3,6]]提示:1 <= A.length <= 10001 <= A[0].length <= 1000方法一:class

2020-10-29 15:34:06 296

原创 Leetcode数据结构与算法(七)

[0097] 一维数组的动态和给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。示例 1:输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。示例 2:输入:nums = [1,1,1,1,1]输出:[1,2,3,4,5]解释:动态和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1,

2020-08-10 23:04:11 556

原创 Leetcode数据结构与算法(六)

Leetcode数据结构与算法(六)

2020-06-12 11:28:17 551

原创 Leetcode数据结构与算法(五)

[0065]汉明距离两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 231.示例:输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置。方法一:异或...

2020-05-04 09:36:27 463

原创 D-Bus 详解:从编译到应用

一、简介D-Bus是一种消息总线系统,是进程间通信 (IPC)的系统。从体系结构上讲,它分为三层:一个库libdbus,它允许两个应用程序相互连接并交换消息。一个消息总线守护程序的可执行文件dbus-daemon,建立在libdbus之上,多个应用程序可以连接。守护程序可以将消息从一个应用程序路由到零个或多个其他应用程序。基于特定应用程序框架的绑定或包装程序库。例如,libdbus-g...

2020-04-25 14:21:09 5543 1

原创 Android10源码下载与编译(Mac移动硬盘)

创建区分大小写的磁盘映像Mac系统默认磁盘,文件系统运行不区分大小写。Git 并不支持此类文件系统,而且此类文件系统会导致某些 Git 命令(例如 git status)的行为出现异常。因此,建议始终在区分大小写的文件系统中对 AOSP 源文件进行操作。有两种方式可以创建磁盘映像,具体操作如下:由于AOSP比较大,但是我们存放在移动硬盘上,更大的空间能够更好地满足未来的需求,所以预留200G...

2020-04-23 19:32:42 2006

原创 Leetcode数据结构与算法(四)

[0049]二进制中1的个数请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。...

2020-04-17 10:19:01 373

原创 Leetcode数据结构与算法(三)

Leetcode数据结构与算法###[0033]从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000方法一: 栈/** * Definition for singly-linked list. * public class ...

2020-04-08 09:45:38 323

原创 Leetcode数据结构与算法(二)

[0017] 二进制链表转整数给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。请你返回该链表所表示数字的 十进制值 。示例 1:输入:head = [1,0,1]输出:5解释:二进制数 (101) 转化为十进制数 (5)示例 2:输入:head = [0]输出:0示例 3:输入:head = [1]输出...

2020-03-26 10:20:39 382

原创 Leetcode数据结构与算法(一)

[0001]求1+2+…+n求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45限制:1 <= n <= 10000解答:等差数列求和公式class Solution { ...

2020-03-20 10:07:58 950

原创 Android开发艺术探索笔记

《Android开发艺术探索》这本书在几年前就已经买了,陆陆续续看过几次,都没有看完,没有理解透。最近重读《Android开发艺术探索》,读了两次,第一次读完感觉还有大量的知识点没有理解,再次阅读,练习书中例子,记读书笔记,理解加深了几分。[学习笔记]Android开发艺术探索:Activity的生命周期和启动模式[学习笔记]Android开发艺术探索:IPC机制[学习笔记]A...

2020-03-13 16:57:05 259

原创 [学习笔记]Android开发艺术探索:Android性能优化

Android设备作为一种移动设备,不管是内存还是CPU的性能都受到了一定的限制,也意味着Android程序不可能无限制的使用内存和CPU资源,过多的使用内存容易导致OOM,过多的使用CPU资源容易导致手机变得卡顿甚至无响应(ANR)。这也对开发人员提出了更高的要求。本章主要介绍一些有效的性能优化方法。主要包括布局优化、绘制优化、内存泄漏优化、响应速度优化、ListView优化、Bitmap优化...

2020-03-13 16:44:57 189

原创 [学习笔记]Android开发艺术探索:综合技术(Crash、Multidex、动态加载、反编译)

使用CrashHandler来获取应用的crash信息检测崩溃并了解详细的crash信息:首先需实现一个uncaughtExceptionHandler对象,在它的uncaughtException方法中获取异常信息并将其存储到SD卡或者上传到服务器中,然后调用Thread的setDefaultUncaughtExceptionHandler为当前进程的所有线程设置异常处理器。public ...

2020-03-13 16:43:41 214

原创 [学习笔记]Android开发艺术探索:Bitmap的加载和Cache

Bitmap的高效加载BitmapFactory类提供四种方法:decodeFile、decodeResource、decodeStream和decodeByteArray;其中decodeFile和decodeResource间接的调用了decodeStream方法;这四个方法最终在Android底层实现。如何高效的加载Bitmap?核心思想:按需加载;很多时候ImageView并没有原始图...

2020-03-13 16:42:04 249

原创 [学习笔记]Android开发艺术探索:Android的线程和线程池

在Android系统,线程主要分为主线程和子线程,主线程处理和界面相关的事情,而子线程一般用于执行耗时操作。在Android中,线程的形态有很多种:​ i. AsyncTask封装了线程池和Handler。​ ii. HandlerThread是具有消息循环的线程,内部可以使用handler​ iii. IntentService是一种Service,内部采用HandlerThread来执...

2020-03-13 16:40:41 142 1

原创 [学习笔记]Android开发艺术探索:Android的消息机制

从开发的角度来说,Handler是Android消息机制的上层接口。Handler的运行需要底层的 MessageQueue 和 Looper 的支撑。MessageQueue是一个消息队列,内部存储了一组消息,以队列的形式对外提供插入和删除的工作,内部采用单链表的数据结构来存储消息列表。Lopper会以无限循环的形式去查找是否有新消息,如果有就处理消息,否则就一直等待着。 线程是默认没有L...

2020-03-13 16:39:42 127

原创 [学习笔记]Android开发艺术探索:四大组件的工作过程之ContentProvider

ContentProvider是一个内存共享型组件,他通过Binder向其他组件乃至其他应用提供数据,当ContentProvider所在的进程启动的时候,ContentProvider会同时启动并且发布到AMS中,需要注意的是,这个时候ContentProvider的onCreate要先于Application的onCreate执行,这是四大组件一个少有的现象一个应用启动的时候,入口方法在Ac...

2020-03-13 16:37:37 148

原创 [学习笔记]Android开发艺术探索:四大组件的工作过程之BoradcastReceiver

广播的注册过程静态注册:在应用的安装时由系统自动完成注册,具体来说是PMS(PackageManagerServer)来完成整个注册过程。其他三大组件也是。动态注册:从ContentWrapper的registerReceiver方法开始, 调用了自己的registerReceiverInternal方法。 private Intent registerReceiverInternal(B...

2020-03-13 16:36:18 156

原创 [学习笔记]Android开发艺术探索:四大组件的工作过程之Service

Service有两种工作状态:启动状态:执行后台计算绑定状态:用于其他组件与Service交互Service的启动过程Service的启动从 ContextWrapper 的 startService 开始在ContextWrapper中,大部分操作通过一个 ContextImpl 对象mBase实现/frameworks/base/core/java/android/conten...

2020-03-13 16:34:39 129

VS2012中使用FFmpeg开发音视频编解码,在Eclipse中使用JNA调用生成的dll文件.md

在VS2012中使用FFmpeg开发音视频编解码,在Eclipse中使用JNA调用生成的dll文件,详细文档描述,可以参考,结合自己实际情况。

2020-04-17

arm-linux-gcc.zip

arm-none-linux-gnueabi-linux-gnu工具链,交叉编译使用

2019-08-24

jna (Java Native Access)的jar包

jna 的jar包,JNA(Java Native Access )提供一组Java工具类用于在运行期间动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。

2018-03-16

Android实现循环切换的轮播图的Demo

Android 实现循环切换的轮播图 ,博文http://blog.csdn.net/baidu_32237719/article/details/54312629配套代码

2017-01-10

Android 实现循环切换的轮播图

Android 实现循环切换的轮播图

2017-01-10

Fragment和动画

Fragment和动画

2016-10-07

android内容提供者

android内容提供者

2016-10-07

Android多媒体编程

Android多媒体编程

2016-10-07

广播与服务第二部分

广播与服务第二部分

2016-10-07

广播与服务第一部分

广播与服务1

2016-09-29

页面跳转和数据传递

页面跳转和数据传递

2016-09-29

网络编程第2部分

网络编程1

2016-09-28

网络编程第1部分

网络编程1

2016-09-28

数据存储第2部分

数据存储第2部分

2016-09-28

数据存储第1部分

数据存储1

2016-09-26

Android软键盘手动显示、隐藏、布局上移和EditText上移Demo

Android软键盘手动显示、隐藏、布局上移和EditText上移Demo

2016-08-31

第一行代码Android学习练习代码12

第一行代码Android学习练习代码12

2016-08-30

第一行代码Android学习练习代码11

第一行代码Android学习练习代码11

2016-08-29

第一行代码Android学习练习代码10

第一行代码Android学习练习代码

2016-08-23

第一行代码Android学习练习代码9

第一行代码Android学习练习代码

2016-08-17

第一行代码Android学习练习代码8

第一行代码Android学习练习代码8

2016-08-16

第一行代码Android学习练习代码7

第一行代码Android学习练习代码7

2016-08-16

第一行代码Android学习练习代码6

第一行代码Android学习练习代码6

2016-08-16

第一行代码Android学习练习代码5

第一行代码Android学习练习代码5

2016-08-15

第一行代码Android学习练习代码4

第一行代码Android学习练习代码4

2016-08-15

第一行代码Android学习练习代码3

第一行代码Android学习练习代码3

2016-08-15

第一行代码Android学习练习代码2

第一行代码Android学习练习代码2

2016-08-12

第一行代码Android学习练习代码

第一行代码Android学习练习代码

2016-08-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除