- 博客(33)
- 收藏
- 关注
原创 插件化Activity: 技术方案分享
前言插件化技术从 2016 年开始就开始百花齐放,如: 奇虎 360 的 replugin,滴滴的 VirtualAPK,到现在的 VirtualApp,插件化经历了市场考验,也算逐步成熟,今天就带大家手把手实现一个插件化框架,希望对你有所帮助~插件化概念插件化是一种动态加载四大组件的技术。最早是为了解决 65535 限制的问题,后来 Google 出来了 multidex 来专门解决现在市面使用插件化一定程度上可以减少安装包大小,实现项目组件化,将项目拆分方便隔离,降低组件化耦合度太高的问题当然插件
2020-11-21 19:09:19 424
原创 字节码插桩(四): AST
我们通过 AndroidStudio 生成Bean对象一般是通过注解来实现自动生成getter/setter方法、equals()和hashCode()方法,其中类(或接口)要符合驼式命名法,首字母大写。方法要符合驼式命名法,首字母小写,类或实例变量要符合驼式命名法,首字母小写。常量要求全部由大写字母或下划线构成,且第一个字符不能是下划线,否则编译器会报警告那么: 编译器是怎么解析到这些不规范的命名方式呢?这里不得不提到一个很重要的字节码插桩技术AST,什么是AST?一. AST概念AST 是 Abs
2020-11-16 06:41:07 679
原创 APT开发指南
改不完的 Bug,写不完的矫情。公众号 杨正友 现在专注音视频和 APM ,涵盖各个知识领域;只做全网最Geek的公众号,欢迎您的关注!之前在学习组件化的时候,有一个组件生命周期插件源码让我百思不得其解,究其原因Annotation Processing Tools)基础没过关,之前的两篇文章,一篇是ASM一篇是AspectJ,还有关如何自定义Plugin系列,反响还不错,果然理论 + 实践才是王道。现在准备将APT也补上,希望以后也能像大佬一样随意定制化插件。一.APT概述APT 是 Annot.
2020-11-11 23:16:46 771
原创 RxJava2.0开发指南
rxjavaRx介绍ReactiveX的历史ReactiveX是Reactive Extensions的缩写,一般简写为Rx,最初是LINQ的一个扩展,由微软的架构师Erik Meijer领导的团队开发,在2012年11月开源,Rx是一个编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步数据流,Rx库支持.NET、JavaScript和C++,Rx近几年越来越流行了,现在已经支持几乎全部的流行编程语言了,Rx的大部分语言库由ReactiveX这个组织负责维护,比较流行的有RxJava/Rx
2020-10-29 12:30:18 405 1
原创 Android 动画简单理解
动画这个东西,他和前几期,有一个很大的不同的是,概念很简单,动画,不就是动一动嘛首先说一下动画的本质:动画是什么呢?动画就是将两个内容平滑的移动,而不是直接切换,所谓的平滑移动就是在一段时间里面,不断地用View.setTranslationX去更新他的位置,一点一点地向目标靠近,直到到达目标为止,这个渐变的过程要通过其他线程来控制.因为如果用主线程的话,他就卡住了,对吧,用线程的操...
2019-03-15 21:39:36 313
原创 Android View的绘制和动画效果的实现
在 Android 应用开发里面,UI是非常重要的一部分,一般情况下,你使用自带控件,再加上一些开源库,已经能够实现大部分的UI效果了,但是对于一些比较花哨比较新颖的效果,,往往需要通过自定义view来实现,自定义View 每个人多多少少都会一点,,但是完全掌握的人却不多,在这我说的这个完全掌握,指的是给你一个任意的设计,只要这个设计是Android能够做到的,你只要能够给做出来,全能给实现,那么...
2019-03-15 21:39:19 1781 2
原创 卡顿监测 · 方案篇 · Android卡顿监测指导原则
“友链: BaguTree《Android 面试、卡顿、ANR》分享Tips: 关注微信公众号 小木箱成长营,回复 "卡顿监测" 可获得卡顿监测免费思维导图”一、引言Hello,我是小木箱,欢迎来到小木箱成长营系列教程,今天将分享卡顿监测 · 方案篇 · Android 卡顿监测指导原则。小木箱从七个维度将 Android 卡顿监测技术方案解释清楚。第一个维度是卡顿定义,第二个维度是卡顿原因,第三个维度是业界方案,第四个维度是相关预研,第五个维度是分析工具,第六个维度是卡顿指标,第七个维度是监测
2023-03-27 17:28:24 776
原创 并发编程 · 基础篇(下) · 三大分析法分析线程池
如果线程正常退出,判断当前线程数量是否小于线程池最小线程数量,如果小于,直接补齐,否则,直接返回。因此,当暂停线程池的时候,集合中的任务就是正在执行的任务,依次遍历调用任务的 pause 方法,当恢复线程池的时候,依次遍历调用任务的 resume 方法。更新线程池的状态为 TIDYING,调用 terminated(),这是一个 hook 方法,可以在这里面做一些资源回收的操作,执行完后,设置线程池状态为 TERMINATED,唤醒在 awaitTermination 方法上等待的线程。
2023-03-10 12:59:03 239
原创 Android业务架构 · 基础篇 · Jetpack
“【小木箱成长营】Android 业务架构系列文章:Android 业务架构 · 提高篇 · MVC、MVP、MVVM 和 MVI 四剑客Android 业务架构 · 实践篇 · MVI+Jetpack+Kotlin 手把手搭建直播应用 App”“Tips: 关注小木箱成长营公众号, 回复"业务架构"可免费获取 Android 业务架构思维导图。”一、序言Hello,我是小木箱,欢迎来到小木箱成长营业务架构系列教程,今天分享的内容是业务架构 · 基础篇 · Jetpack 四件套。201
2023-03-07 11:06:40 416
原创 内存优化 · 基础论 · 初识 Android 内存优化
【小木箱成长营】内存优化系列文章:内存优化 · 工具论 · 常见的 Android 内存优化工具和框架内存优化 · 方法论 · 揭开内存优化神秘面纱内存优化 · 实战论 · 内存优化实践与应用Tips: 关注微信公众号小木箱成长营,回复"内存优化"可免费获得内存优化思维导图一、序言Hello,我是小木箱,欢迎来到小木箱成长营系列教程,今天将分享内存优化 · 基础论 · 初识 Android 内存优化。本次分享主要分为五个部分内容,第一部分内容是 5W2H 分析内存优化,第二部分内容是内
2023-02-12 16:36:46 569
原创 并发编程 · 基础篇(中) · 三大分析法分析 Handler
小木箱成长营并发编程系列教程(排期中):并发编程 · 基础篇(上) · android 线程那些事[1]并发编程 · 基础篇(下) · android 线程池那些事并发编程 · 提高篇(上) · Java 并发关键字那些事并发编程 · 提高篇(下) · Java 锁安全性那些事并发编程 · 高级篇(上) · Java 内存模型那些事并发编程 · 高级篇(下) · Java 并发 BATJ 面试之谈并发编程 · 实战篇 · android 下载器实现Tips: 关注微信公众号小木箱成长营
2023-02-07 09:36:17 315
原创 并发编程 · 基础篇 · android线程那些事
小木箱成长营并发编程系列教程(排期中):并发编程 · 基础篇(下) · android线程池那些事并发编程 · 提高篇(上) · Java并发关键字那些事并发编程 · 提高篇(下) · Java锁安全性那些事并发编程 · 高级篇(上) · Java内存模型那些事并发编程 · 高级篇(下) · Java并发BATJ面试之谈并发编程 · 实战篇 · android下载器实现Tips: 关注微信公众号小木箱成长营,回复 "并发编程" 可免费获得并发编程思维导图一、序言Hello,我是小木
2023-02-03 20:30:50 582
原创 Web3.0 · 基础层技术 · SCQA模型趣谈密码学
【小木箱成长营】密码学系列教程:Web3.0 · 基础层技术 ·密码学在移动端应用与实践一、序言Hello,我是小木箱,欢迎来到小木箱成长营密码学系列教程,今天将分享 Web3.0 · 基础层技术 · SCQA 模型趣谈密码学。SCQA 模型趣谈密码学主要分为四部分,第一部分是加解密算法,第二部分是 Hash 算法,第三部分是数据编解码,最后一部分是总结与展望。其中,加解密算法主要是分为四部分,第一部分是对称加密,第二部分是 DH 交换算法,第三部分是非对称加密,第四部分是混合加密。如果学
2023-02-03 14:18:29 972
原创 【写作能力提升】写作小白需要避免的五个写作误区和灵魂五问
“【写作能力提升】系列文章:为什么建议你一定要学会写作?手把手教你快速搞定4个职场写作场景5种搭建⽂章架构的⽅法”免费赠送!”一、前言Hello,我是小木箱,今天主要分享的内容是: 写作小白需要避免的五个写作误区和灵魂五问。二、 误区⼀: 对写作效果有过⾼的预期写作小白容易犯的第一个误区是: 对写作效果有过高的预期。比如有的人刚开始动笔写作没多久,就想写出阅读量1w+的技术文章,分分钟打败鸿洋、三太子敖丙和JavaGuide等。或者觉得自己可以写出比他们更高的水准。写不出来,就开始自我怀
2023-01-13 20:40:09 738
原创 手把手教你快速搞定4个职场写作场景
“【写作能力提升】系列文章:为什么建议你一定要学会写作?手把手教你快速搞定 4 个职场写作场景5 种搭建⽂章架构的⽅法”免费赠送!”一、前言Hello,我是小木箱,今天主要分享的内容是: 写作小白需要避免的五个写作误区和灵魂五问。二、 误区⼀: 对写作效果有过⾼的预期写作小白容易犯的第一个误区是: 对写作效果有过高的预期。比如有的人刚开始动笔写作没多久,就想写出阅读量 1w+的技术文章,分分钟打败鸿洋、三太子敖丙和JavaGuide等。或者觉得自己可以写出比他们更高的水准。写不出来,就开
2023-01-13 20:17:48 909
原创 包体积优化·工具论·初识包体积优化
“【小木箱成长营】包体积优化系列文章:包体积优化 · 实战论 · 怎么做包体积优化? 做好能晋升吗? 能涨多少钱?包体积优化 · 方法论 · 揭开包体积优化神秘面纱”一、引言Hello,我是小木箱,欢迎来到小木箱成长营系列教程,今天将分享包体积优化·工具论·初识包体积优化。小木箱从两个维度将 Android 包体积优化工具论解释清楚,本文主要说了四个部分内容,第一部分内容是业务问题和挑战。第二部分内容是包体优化基础知识。第三部分内容是代码优化。最后部分内容是总结与展望。代码优化分为四部分内容,
2023-01-13 15:46:26 2074 2
原创 包体积优化 · 实战论 · 怎么做包体优化? 做好能晋升吗? 能涨多少钱?
“【小木箱成长营】包体积优化系列文章:包体积优化 · 方法论 · 揭开包体积优化神秘面纱包体积优化 · 工具论 · 初识包体积优化BaguTree 包体积优化录播视频课”一、引言Hello,我是小木箱,欢迎来到小木箱成长营系列教程,今天将分享包体积优化 · 实战论 · 怎么做包体优化? 做好能晋升吗? 能涨多少钱?上一次分享,小木箱从三个维度将 Android 包体优化方法论解释清楚,第一部分内容是针对 So 优化,第二部分内容是针对 Res 资源优化,第三部分内容是针对 Assets/Ra
2023-01-13 15:45:09 1203 2
原创 Android架构演进 · 设计模式· 为什么建议你一定要学透设计模式?
“【小木箱成长营】设计模式系列文章(排期中):Android 架构演进 · 设计模式 · Android 常见的 4 种创建型设计模式(上)Android 架构演进 · 设计模式 · Android 常见的 4 种创建型设计模式(下)Android 架构演进 · 设计模式 · Android 常见的 6 种结构型设计模式(上)Android 架构演进 · 设计模式 · Android 常见的 6 种结构型设计模式(中)Android 架构演进 · 设计模式 · Android 常见的 6 种结构
2023-01-13 15:43:45 769
原创 【写作能力提升】“5种搭建⽂章架构的⽅法”免费赠送!
“【写作能力提升】系列文章:为什么建议你一定要学会写作?“5 种搭建⽂章架构的⽅法”免费赠送!写作小白需要避免的五个写作误区和灵魂五问”一、前言Hello,我是小木箱,今天主要分享的内容是: 5 种搭建⽂章架构的⽅法!大家普遍有一个共同的疑惑——如何写作? 其实是一个很难回答的问题。因为问题比较空泛,好比别人问你怎样赚钱一样难回答。如果问我如何写好一篇文章?需要具备的核心的技能是什么?我可能会说: 搭建框架,框架是文章的根基,能不能搭好文章的框架决定了文章的质量。想要写好一篇文章,最先要
2023-01-13 15:38:30 418
原创 启动优化·基础论·浅析 Android 启动优化
“【小木箱成长营】启动优化系列文章(排期中):启动优化 · 工具论 · 启动优化常见的六种工具启动优化 · 方法论 · 这样做启动优化时长降低 70%启动优化 · 实战论 · 手把手教你破解启动优化十大难题”一、引言Hello,我是小木箱,欢迎来到小木箱成长营系列教程,今天将分享启动优化·基础论·浅析 Android 启动优化。小木箱从四个维度将 Android 启动优化基础论解释清楚。本文主要说了四部分内容,第一部分内容是启动基础,第二部分内容是启动优化价值,第三部分内容是启动优化业务痛点
2023-01-13 15:23:15 635
原创 APM性能监控
改不完的 Bug,写不完的矫情。公众号 杨正友 现在专注移动基础开发 ,涵盖音视频和 APM,信息安全等各个知识领域;只做全网最 Geek 的公众号,欢迎您的关注!APM 简要介绍APM 全称 Application Performance Management & Monitoring (应用性能管理/监控)性能问题是导致 App 用户流失的罪魁祸首之一,如果用户在使用我们 App 的时候遇到诸如页面卡顿、响应速度慢、发热严重、流量电量消耗大等问题的时候,很可能就会卸载掉我们的 Ap.
2020-11-26 22:36:45 20177
原创 Android耗电量线下监控: Battery Historian
改不完的 Bug,写不完的矫情。公众号 杨正友 现在专注移动基础平台开发 ,涵盖音视频, APM和信息安全等各个知识领域;只做全网最 Geek 的公众号,欢迎您的关注!精彩内容不容错过~一. 发热案例分析Android 框架层通过一个名为 batterystats 的系统服务,电池的信息,电压,温度,充电状态等等,都是由BatteryService来提供的。电池的这些信息是BatteryService通过广播主动把数据传送给所关心的应用程序。实现了电量统计的功能,batterystats实现原理可以.
2020-11-26 14:17:09 659
原创 Android悬浮窗基础: Window 和 WindowManager
引言Window 是类似悬浮窗的东西WM 参与 Window 的 Create 和 管理, WMS 和 WM 共同完成 Window 的 IPC交互Window 是 View 直接 管理者Activity 的 setContenView 底层是由PhoneWindow的installDecor绘制的.1. 如何使用 WM 添加一个 Window?// 将一个Button添加到屏幕位置(100,300)的位置Button button = new Bu
2020-11-25 17:18:57 622
原创 Kotlin热身篇: 简介与基本用法
改不完的 Bug,写不完的矫情。公众号 杨正友 现在专注移动基础平台开发 ,涵盖音视频, APM和信息安全等各个知识领域;只做全网最 Geek 的公众号,欢迎您的关注!精彩内容不容错过~一. kotlin概念Kotlin 拥有强大的生态,不仅支持 Android开发,服务端,前端和原生环境,同时Kotlin是一门跑在Java虚拟机上的函数式语言。并符合JVM的设计规范,如: 类型擦除,装箱和拆箱,那么Kotlin和Java有什么共同点呢?二. kotlin和java8的相同点说完共同点我们再聊.
2020-11-25 16:44:32 267
原创 Android网络框架系列: Retrofit2.5
引言 Retrofit 是 Square 公司开发的一款针对 Android 网络请求的框架,遵循 Restful 设计风格,我们查看 invoke 可以发现:底层基于 OkHttp 实现的,相比其他网络请求框架,有以下优势:性能最好,速度最快(动态代理优势)简洁易用,代码简化解耦彻底,职责细分易与其他框架联用(Rxjava)当然也有弊端:因为高度封装,相对于 OkHttp ,扩展性变差了,不过整体能满足项目需求.今天我就带大家来看一下 Retrofit 究竟是如何使用,以及内部工作原理一.概
2020-11-23 05:45:01 568
原创 App极限瘦身: png 打包前自动化转换 webp
改不完的 Bug,写不完的矫情。公众号 杨正友 现在专注移动基础开发 ,涵盖音视频和 APM,信息安全等各个知识领域;只做全网最 Geek 的公众号,欢迎您的关注!前言大家都知道 png 是比较占用App体积的,有没有工具可以在打包前(比如 assembleDebug、assembleRelease)自动去转化所有的 png 图片,包括第三方依赖库里面的呢?之前不经意间发现有一个神器cwebp 转化工具,是不是可以借鉴这种工具自己写个Plugin完成图片转换,同时支持检查大图片,图片大小可配置。话不.
2020-11-23 05:09:22 541
原创 App极限瘦身: 动态下发so
改不完的 Bug,写不完的矫情。公众号 杨正友 现在专注移动基础开发 ,涵盖音视频和 APM,信息安全等各个知识领域;只做全网最 Geek 的公众号,欢迎您的关注!前言一般来说,作为一个成熟的应用,native 文件会越来越多,资源文件过大安卓的包体越来越大,包体积的增长,逐渐带来了一些不利影响,比如用户安装成功率降低,CDN 流量费用增加,流失部分付费渠道方,新拓展的渠道方抱怨包体过大,限制了渠道拓展,那么如何解决这种业务痛点呢? 今天就详细给大家介绍一下 Android 动态化管理 so比如 .
2020-11-21 19:17:38 1466
原创 网络传输: 序列化与反序列化
改不完的 Bug,写不完的矫情。公众号 杨正友 现在专注音视频和 APM ,涵盖各个知识领域;只做全网最 Geek 的公众号,欢迎您的关注!一. 定义以及相关概念由于在系统底层,数据的传输形式是简单的字节序列形式传递,即在底层,系统不认识对象,只认识字节序列,而为了达到进程通讯的目的,需要先将数据序列化,而序列化就是将对象转化字节序列的过程。相反地,当字节序列被运到相应的进程的时候,进程为了识别这些数据,就要将其反序列化,即把字节序列转化为对象无论是在进程间通信、本地数据存储又或者是网络数据传输.
2020-11-16 06:39:09 1975
原创 Android框架系列: Retrofit
引言 Retrofit 是 Square 公司开发的一款针对 Android 网络请求的框架,遵循 Restful 设计风格,我们查看 invoke 可以发现:底层基于 OkHttp 实现的,相比其他网络请求框架,有以下优势:性能最好,速度最快(动态代理优势)简洁易用,代码简化解耦彻底,职责细分易与其他框架联用(Rxjava)当然也有弊端:因为高度封装,相对于 OkHttp ,扩展性变差了,不过整体能满足项目需求.今天我就带大家来看一下 Retrofit 究竟是如何使用,以及内部工作原理一.概
2020-11-14 06:24:51 769
原创 音视频基础(网络传输):视频编码推流
一. 前言 一个 I420 格式的图像大小为: 宽 x 高 x3/2 ,这意味着 640x480 的分辨率,10 fps 的视频,我们 1s 也会 产生 4M 左右的数据。因此我们需要使用编码算法对这个图像数据进行编码,让其数据量变小。还记得我们交叉编 译的 x264 库吗?接下来我们将使用 x264 对摄像头采集的图像进行编码。当然这里考虑到程序性能等问题,我们首 先需要进行一些设计。二. RTMPClient 在从 Image 获取到 I420 数据的过程中,我们会执行一系列的方法。 那么在直
2020-11-11 23:31:34 563
原创 组件化: Android动态权限
权限组件设计背景历史版本权限组件使用的是AndPermission,长期无人维护,历史代码臃肿,不便拓展,考虑使用PermissionsDispatcher,但是PermissionsDispatcher APT插件会影响编译效率,easypermissions侵入性太强,会影响整个工程,RxPermissions 貌似是最佳选择,但是RxPermissions需要高度自定义符合自己项目特色的UI,所以干脆自己写个权限组件好了,希望大家喜欢权限组件设计需求自定义炫酷权限弹框不入侵工程Activity
2020-11-11 23:30:00 221
原创 音视频基础(网络传输): RTMP封包
RTMP 基础RTMP 概念与 HTTP(超文本传输协议)同样是一个基于 TCP 的 Real Time Messaging Protocol(实时消息传输协议)。由 Adobe Systems 公司为 Flash 播放器和服务器之间音频、视频和数据传输开发的一种开放协议 。在国内被广泛的应用于直播 领域。HTTP 默认端口为 80,RTMP 则为 1935。 我们通过阅读 Adobe 的协议规范,通过与服务器建立 TCP 通信,根据协议格式生成与解析数据即可使用 RTMP 进行 直播。当然我们也可以借
2020-11-11 23:27:44 877
原创 并发编程系列: 线程基础
改不完的 Bug,写不完的矫情。公众号 杨正友 现在专注音视频和 APM ,涵盖各个知识领域;只做全网最Geek的公众号,欢迎您的关注!线程的合理使用对于Android开发来说,确实非常重要,一年前我也零零散散写了两篇Android讯息邮差-线程和线程切换 和锁机制的文章,现在回过头复习,稍微有点浅显,所以准备将这些碎片化的知识点系统整理一下,希望看完整个系列文章的你以后可以自信的告诉我: 多线程,我不怕,放马过来吧。面试官这些八股文咱都是手把手实践过的,还为难我就说不过去了吧~开启线程的5种方.
2020-11-10 12:44:41 360
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人