自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 从Java入门Objective-C

Objecttive-C语言是以C语言为基础的一个扩展集,它添加了OOP等很多新特性。Objecttive-C可用来编写iOS和OS X应用,一般使用苹果提供的Xcode作为开发环境。Objective-C的面向对象语法源自SmallTalk,是消息传递(Message Passing)风格。消息处理到运行时(runtime)才会动态决定,给对象发送一个它无法处理的消息(只有方法声明,但没有实现),编译时可以编译通过,但在运行时会抛出异常。

2023-10-19 11:00:06 102

原创 线程同步-ReentrantLock&AQS

综合上面的分析,AQS提供了一个基础的同步框架,ReentrantLock在AQS的基础上实现了加锁/解锁的功能。/*** 当前节点的状态,包括SIGNAL 、CANCELLED 、CONDITION、PROPAGATE、0/** 前一个节点 */ volatile Node prev;/** 下一个节点 */ volatile Node next;/** 指向的线程 */ volatile Thread thread;/** Condition下的下一个节点;

2023-06-23 17:07:10 155

原创 Android图片库Fresco

Fresco的API类似MVC模式,其中DraweeView负责View展示,DraweeHierarchy负责Drawable数据的维护和组织,DraweeController负责加载图片(图片加载功能由ImagePipeline实现)

2023-03-21 20:42:55 867

原创 Android OpenCV基础(四、边缘检测)

在中介绍过OpenGL实现边缘检测的方法,本章介绍OpenCV实现边缘检测的方法,这些方法都位于imgproc模块。

2023-03-16 17:26:08 817

原创 Android网络开发(四、网络理论&工具篇)

计算机网络体系结构分为3种:OSI体系结构、TCP / IP四层体系结构、TCP / IP五层体系结构:三种体系结构只是对网络结构进行抽象划分的方式不同,主要思想和层次结构是一致的。其中,OSI七层协议体系偏理论知识,TCP / IP体系结构偏TCP/IP协议簇比较常用。TCP / IP四层体系结构中的"网络接入层"对应着TCP / IP五层体系结构中的"数据链路层"和"物理层"。

2023-03-16 17:25:12 1023

原创 Android网络开发(三、okhttp责任链)

拦截器前处理后处理自定义拦截器可自定义,如拼接公参等重试和重定向等拦截器重试和重定向等桥接拦截器添加了Content-Type、Host、Cookie等headergzip解压缓存拦截器如果缓存可用,则直接返回缓存如果服务器返回304则返回缓存。cache不为空时对response进行缓存连接拦截器建立连接自定义网络拦截器数据发送&读取拦截器okio写数据okio读数据。

2023-03-16 17:23:41 334

原创 Android网络开发(二、okhttp&retrofit)

  在Android开发中,一般很少直接使用HttpURLConnection / HttpsURLConnection,比较常用的开源网络库有okhttp、retrofit等。  okhttp支持异步网络请求/同步网络请求,它默认支持:(1)HTTP/2 相同域名下的请求共用一个socket;(2)通过连接池减少请求时延(如果HTTP/2不可用);(3)支持GZIP压缩;(4)支持Response缓存。  在build.gradle中添加okhttp依赖如下:2.2 接收数据  OKhttp使用Cal

2023-03-09 14:01:25 1404

原创 Android网络开发(一、Socket通信&HTTP通信)

Socket:即套接字,其本身并不是一种通信协议,它是封装了TCP/IP、UDP 协议的API实现。在创建Socket对象后,底层会完成TCP/IP的三次握手等(UDP协议对应的API是DatagramSocket)。

2023-03-08 18:52:41 2659

原创 Android性能优化工具

CPU 性能分析器可以在APP运行时,实时检查应用的 CPU 使用率和线程活动,也可以检查记录的方法轨迹、函数轨迹和系统轨迹的详情。(1)Sample JAVA Methods不能采集耗时很短的方法,而Trace JAVA Methods可以采集耗时很短的方法;

2023-03-07 18:33:38 1400

原创 Android OpenGL基础(六、帧缓冲)

经过前面几张的学习后,我们对OpenGL基础用法已经有了初步理解,现在来介绍下图形渲染管线流程,为OpenGL进阶知识做好准备。OpenGL的图形渲染管线(Graphics Pipeline)是指:将一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程。

2023-03-06 14:58:15 738

原创 Android基础:Activity&Window&ViewRootImpl的关系

前言  为了描述Activity&Window&ViewRootImpl的关系,我们分别从以下三个阶段进行分析:Activity的启动流程;Activity的onCreate()阶段;Activity的resume流程;一、Activity启动流程  在Activity启动流程分析中分析过,App进程创建后,会在ActivityThread的performLaunchActivity()方法中会创建Activity实例。1.1 ActivityThread.performL

2022-04-17 17:16:16 3261

原创 Android OpenCV基础(三、图片处理)

一、概述  图片处理imgproc模块包含基本的图像转换,包括滤波以及类似的卷积操作。本章来介绍下imgproc模块常用的几个功能。二、颜色转换  图片处理模块提供了不同颜色空间互相转换的API。例如:转换灰度图直接调用图片处理模块提供的API即可:// rgba转灰度cv::cvtColor(rgbMat, dst, CV_RGBA2GRAY);// yuv转rgbacv::cvtColor(yuvMat, rgbMat, CV_YUV420sp2RGBA, 4);// 灰度转rgbac

2022-04-09 13:24:39 7135 1

原创 Android OpenCV基础(二、core模块)

一、概述  在真实世界中,我们(人类)看到的是图像,而让数字设备来“看“的时候,则是在记录图像中的每一个点的数值。  如上面的图像,数字设备看到的是一个矩阵,该矩阵包含了所有像素点的值。最终在计算机世界里所有图像都可以简化为数值矩以及矩阵信息。  OpenCV的core模块定义了如何在内存中存储图像,还包括矩阵、向量、点等一些基础操作的定义。二、基本图像容器  OpenCV定义了Mat类作为基本图像容器,此外Mat还可以只单纯地表示一个矩阵。Mat由两个数据部分组成:矩阵头(包含矩阵尺寸,存储方

2022-04-05 17:51:26 5141 1

原创 Android OpenCV基础(一、OpenCV入门)

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法(最基本的滤波到高级的物体检测皆有涵盖)。  OpenCV 的应用领域非常广泛,包括图像拼接、图像降噪、产品质检、人机交互、人脸识别、动作识别、动作跟踪、无人驾驶等。OpenCV 还提供了机器学习模块,你可以使用正态贝叶斯、K最近邻、支持向量机、决策树、随机森林、人工神经网络等机器学习算法。

2022-04-03 18:26:18 18389 2

原创 Android OpenGL基础(五、相机预览及滤镜)

一、相机简介  在Android OpenGL基础(三、绘制Bitmap纹理)一文中,我们简单介绍了如何绘制如何把一张图片贴到四边形上。本文介绍如何用GLSurfaceView来实现预览相机。与单张图片纹理不同的地方在于,相机是一个内容不断变化的纹理。  首先,先简单介绍相机的几个常用方法:1.1 声明相机权限  如果APP需要使用相机,则需要在manifest.xml中声明:<uses-permission android:name="android.permission.CAMERA"

2022-04-02 21:43:22 1763

原创 Android OpenGL基础(四、图片后处理)

一、后处理  在Android OpenGL基础(三、绘制Bitmap纹理)一文中,我们简单介绍了如何把一张图片绘制到四边形上。现在我们可以在绘制原始图片的基础上再实现一些后处理的功能,例如灰度、反色、模糊等。  对于图片的后期处理,我们所要改的只有片段着色器的代码,在使用GLSL内建的texture2D函数来采样纹理的颜色后,先进行后期处理,再传给片段着色器。二、灰度  先回忆下绘制原始图片的片段着色器的代码:/** * 片段着色器代码 */private val fragmentShad

2022-04-02 21:42:38 1743 1

原创 Android OpenGL基础(三、绘制Bitmap纹理)

一、纹理简介  在Android OpenGL基础(一、绘制三角形四边形)一文中,我们简单介绍了如何绘制纯色三角形和四边形。现在介绍如何把一张图片贴到四边形上。  在OpenGL中,我们把需要贴合到物体上的图片称为纹理。纹理是一个2D图片(甚至也有1D和3D的纹理),可以把纹理理解为一个细节更丰富的颜色的集合。与之前例子中纯色四边形不同的是,纹理细节更加丰富,OpenGL可以根据纹理计算得到四边形每个点应该绘制的颜色。1.1 纹理坐标系  为了能够把纹理映射到四边形上,我们需要指定四边形的每个顶点各

2022-04-02 21:41:57 3752 2

原创 Android OpenGL基础(二、坐标系统)

一、引言  在Android OpenGL基础(一、绘制三角形四边形)中,我们简单实现了绘制三角形的功能。大家可能会发现,我们声明的是一个标准设备坐标系下的等边三角形:class Triangle { // 三角形三个点的坐标值 private var triangleCoords = floatArrayOf( 0.0f, 0.5f, 0.0f, // top -0.5f, -0.5f, 0.0f, // bottom left

2022-04-02 21:41:28 3270

原创 Android OpenGL基础(一、绘制三角形四边形)

一、OpenGL简介1.1 OpenGL规范  OpenGL 是一种跨平台的图形 API,用于为 3D 图形处理硬件指定标准的软件接口。OpenGL ES 是 OpenGL 规范的一种形式,适用于嵌入式设备。Android 支持多版 OpenGL ES API(推荐在最新 Android 设备上使用OpenGL ES 2.0 API版本):OpenGL ES 1.0 和 1.1 - 此 API 规范受 Android 1.0 及更高版本的支持。OpenGL ES 2.0 - 此 API 规范受 A

2022-04-02 21:40:24 3188 1

原创 组件化基础ARouter(四、拦截器)

一、ARouter概述  ARouter是一个用于帮助Android App进行组件化改造的框架 —— 支持模块间的路由、通信、解耦。ARouter的典型应用场景有:从外部URL映射到内部页面,以及参数传递与解析;跨模块页面跳转,模块间解耦;拦截跳转过程,处理登陆、埋点等逻辑;跨模块API调用,通过控制反转来做组件解耦;  本篇主要介绍ARouter的用法之一:拦截跳转。拦截跳转比较经典的应用就是在跳转过程中处理登陆事件,这样就不需要在目标页重复做登陆检查。二、基础用法  通过一个简单的

2022-04-02 21:38:24 3549

原创 组件化基础ARouter(三、参数传递与解析)

一、ARouter概述  ARouter是一个用于帮助Android App进行组件化改造的框架 —— 支持模块间的路由、通信、解耦。ARouter的典型应用场景有:从外部URL映射到内部页面,以及参数传递与解析;跨模块页面跳转,模块间解耦;拦截跳转过程,处理登陆、埋点等逻辑;跨模块API调用,通过控制反转来做组件解耦;  本篇主要介绍ARouter的用法之一:参数传递与解析。二、基础用法  仍然和"组件化基础ARouter(一)"中举相同的例子:在MainActivity中有一个Fir

2022-04-02 21:37:42 4338

原创 组件化基础ARouter(二、跨模块API调用)

一、ARouter概述  ARouter是一个用于帮助Android App进行组件化改造的框架 —— 支持模块间的路由、通信、解耦。ARouter的典型应用场景有:从外部URL映射到内部页面,以及参数传递与解析;跨模块页面跳转,模块间解耦;拦截跳转过程,处理登陆、埋点等逻辑;跨模块API调用,通过控制反转来做组件解耦;  本篇主要介绍ARouter的用法之一:跨模块API调用。在组件化中,为了接耦各个模块,一般做法是各个模块之间不直接依赖,改为依赖模块的接口层。二、ARouter基础用法

2022-03-30 12:51:28 3284

原创 组件化基础ARouter(一、启动Activity)

一、ARouter概述  ARouter是一个用于帮助Android App进行组件化改造的框架 —— 支持模块间的路由、通信、解耦。ARouter的典型应用场景有:从外部URL映射到内部页面,以及参数传递与解析;跨模块页面跳转,模块间解耦;拦截跳转过程,处理登陆、埋点等逻辑;跨模块API调用,通过控制反转来做组件解耦;  本篇主要介绍ARouter的用法之一:跨模块跳转启动Activity。二、ARouter基础用法  首先,通过一个简单的例子来介绍ARouter的基础用法:在Main

2022-03-30 12:49:32 1670

原创 Android内存泄漏&leakcanary2.7

内存泄漏,是指一些对象已经不再需要,但是无法成功被gc回收,导致这部分内存无法释放,造成资源的浪费。当大量的内存泄漏堆积时,严重时还容易间接引发OOM。

2021-12-29 14:09:04 3428

原创 Android内存管理基础

仅作为个人学习笔记,请小心求证。欢迎访问:https://blog.csdn.net/weixin_55626853内存管理概览:https://developer.android.com/topic/performance/memory-overview内存分配:https://developer.android.com/topic/performance/memory-managementAndroid Studio Profiler:https://developer.android.co..

2021-11-09 20:52:49 5563

原创 Android反编译工具

概述本文主要介绍如何将Android apk反编译成源码,一般有两种方式:(1)jadx;(2)dex2jar结合JD-GUI使用;对比二者,jadx使用起来更方便一点。一、jadxjadx(详见github)支持将dex文件或者apk文件反编译成java源码;提供了命令行和图形界面两种使用方式。1.1 命令行首先,安装jadx:>brew install jadx然后,就可以使用jadx工具了,使用方式如下:>jadx[-gui] [options] <input

2021-10-28 13:10:18 2254

原创 Android基础:使用注解Annotation Processor实现一个简单的路由

仅作为个人学习笔记,请小心求证。一、Annotation Processor简介Annotation Processor表示注解处理器;在java代码的编译阶段,Annotation Processor会对注解进行处理,在这个机制上,我们可以自定义Annotation Processor来实现对注解的不同处理。在Dagger、butterknife等开源库中都使用到了Annotation Processor。二、背景描述假设:需要创建一个路由管理类RouterManager()来实现对不同..

2021-10-05 08:24:17 887

原创 Android代理模式基础

一、代理模式代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。二、静态代理静态代理的代理类持有被代理者的引用,在方法调用时,代理对象调用了被代理对象去执行真正的实现。2.1 简单示例假如对于一个日志处理功能,可通过代理类代理实例日志处理类:// 1.首先定义接口层interface ILogProcessor { public void printLog(String log);}// 2.定义实现类public class MainLogProcessor imp

2021-05-31 19:46:09 1705 4

原创 UniversalImageLoader基础

UniversalImageLoader是一个开源图片加载库,内部使用了内存缓存、本地缓存、网络下载实现了加载bitmap的功能;内存缓存有LruMemoryCache(默认)等缓存策略。基础用法// 1.设置加载图片的选项DisplayImageOptions displayImageOptions = new DisplayImageOptions.Builder() .cacheInMemory(true) .cacheOnDisk(false)

2021-05-31 19:41:05 446

原创 Protocol buffers基础

一、基础知识1.11.2 protocol buffer编译器二、安装步骤2.1 pb compiler安装步骤下载pb:https://developers.google.com/protocol-buffers/docs/downloads下载后的文件中install.txt中说明步骤进行安装: 1. `cd' to the directory containing the package's source code and type `./configure' to conf

2021-05-31 19:36:54 731

原创 kotlin 协程基础

kotlin coroutine官方文档:http://www.kotlincn.net/docs/reference/coroutines/coroutines-guide.htmlhttps://kotlinlang.org/docs/coroutines-overview.htmlhttps://github.com/Kotlin/kotlinx.coroutines本质上,协程是轻量级的线程。协程就像非常轻量级的线程。线程是由系统调度的,线程切换或线程阻塞的开销都比较大。而协程依赖于线.

2021-05-31 16:27:23 601 1

原创 MVVM基础

基础用法添加依赖Lifecycle基础用法public class ThirdActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

2021-05-31 16:21:44 337

原创 EventBus基础

一、EventBus简介EventBus README:https://github.com/greenrobot/EventBus/官方文档:https://greenrobot.org/eventbus/documentation/# EventBus is a publish/subscribe event bus for Android and Java.# EventBus是一个事件发布/订阅框架。二、基础用法举例:在MainActivity中,在用户填写姓名、年龄后点击确定,

2021-05-03 21:16:08 237

原创 Android NDK开发基础

仅作为个人学习记录,请小心求证。https://developer.android.com/ndk/guides?hl=zh-cn前言NDK即Native Development Kit,是Android上用来开发c/c++的开发工具包。安装步骤:https://developer.android.com/studio/projects/install-ndk一、基础用法在local.properties中配置ndk目录:ndk.dir=/Users/bc/android-ndk-r1.

2021-04-21 17:25:18 4311

原创 Activity启动流程分析(android-29)

仅作为个人学习记录,请小心求证。一、基础知识1. binder机制简介binder是进程间通信的一种方式。在操作系统中,分为内核空间和用户空间,每个app都运行在自己的用户空间,binder机制底层正是两个app进程通过共享内核内存区域实现的;具体实现不做深入分析;在binder机制中,进行进程通信的两方,可分别称他们为Cient进程和Server进程;Cient进程和Server进程是由具体场景而定的,一个进程即可以是Cient进程,也可以是Server进程。2. ServiceManage.

2021-04-21 17:24:14 2108

空空如也

空空如也

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

TA关注的人

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