自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 android布局XML属性能力增强(圆角、虚线、边框等)

概述 android开发中,我们常常使用xml来写布局文件,这种实现方式不仅简单,而且表达能力更强。但是google提供的布局属性有限,有些功能的实现我们不得不实用代码,或者自定义控件的方式来实现。那有没有一种方法,可以将属性增强来实现额外的功能呢?例如我们常常使用background 来表示和设置背景,那是不是可以使用layout_radius来表示和设置圆角呢?使用示例 需要在项目build.gradle中引用依赖 implementation 'com.zh...

2020-09-21 10:28:49 14463 9

原创 android富文本(SpannableString封装)

github地址:https://github.com/long8313002/EasyRichText使用指南项目build.gradleimplementation 'com.zhangzheng.easyrichtext:library:1.0.0'布局xml文件显示效果支持属性 分类 属性名称 说明 示例 基本属性 ...

2020-09-15 11:17:42 7253

原创 Activity启动速度极限优化

结论:加载时间从436ms-->96ms(优化率78%)github: https://github.com/long8313002/ActivityOptimization概述本文主要是为了和大家探讨,页面加载性能,主流优化方案外的其他技术方案。核心目的是极限减小页面启动速度,好处的话也是毋庸置疑的,可以极大增加用户体验。另外也是扩展思路,掌握更多知识点。主流方案 本文不会花太多篇幅讨论这些主流方案,另外这些方案在百度也很容易可以找到,不...

2020-09-08 16:01:35 8106 7

原创 永不停歇的引擎-异常处理

最近发现了之前写的一篇博客,和这个类似,大家可以参考着看。事件太久了,我都忘记还有另外一个博客地址了。https://blog.csdn.net/zhangzheng0602/article/details/69383926开源地址:https://github.com/long8313002/CrashProtect使用指南:build.gradleimplementation "com.zhangzheng.crashProtect:crashprotect...

2020-09-05 18:34:05 6517 4

原创 Kotlin异步转同步

传统写法 suspend fun requestLocation(context: Context) = withContext(Dispatchers.IO) { val lock = CountDownLatch(1) var mLocation: AMapLocation? = null val callBack = object : LocationManager.ILocationCallback { overri

2020-10-19 16:56:54 3329

原创 Android开发Activity页面预加载

概述 某些业务场景下,为了提高用户体验,我们可能需要在前一个页面就将下一个页面的数据准备好,减少用户后续操作的时间。因为Activity在设计上采用了低耦合,高度的隔离使得传统的预加载Activity方案不够优雅,现提供一种更加优雅的预加载方案,可以预先加载好布局和页面数据。github:https://github.com/long8313002/PreloadingActivity使用 说明:因为库使用的是kotlin开发,需要在项目配置kotli...

2020-10-13 11:12:20 6550 5

原创 Android高扩展高可用版本升级库

概述 最近又需要做一个apk升级功能,这个功能基本上每新做一个app就需要重写一遍,为了方便后续的使用,现对升级功能进行封装。因为面向不是单一应用,所以需要保持高抽象、高扩展性,以适配所有的app。配置build.gradle implementation 'com.zhangzheng.versionupgrade:library:1.0.0'AndroidMainfest.xml <provider androi...

2020-09-25 17:19:06 367

原创 Android最优雅SharedPreferences封装(Kotlin版本)

概述 SharedPreferences作为android开发中最常用的持久化存储方案,非常适合属性和配置的本地存储(另外也可以使用本地文件、数据库的方式实现持久化)。虽然SharedPreferences的使用较为方便,但是维护起来确非常的麻烦,我们很容易定义出冗余的配置,也可能会生成大量的配置文件,甚至我们没有足够的信心来确定,定义的属性是否被重复定义(会导致隐晦bug)。现基于Kotlin来进行面向对象API的封装(使用到的技术有:类扩展、动态代理、注解等)。使用...

2020-09-24 14:21:11 4808 4

原创 Android使用Kotlin协程封装网络库

概述 最近又要替换网络库成了,导致所有的业务代码都要替换且要重新测试回归。为了防止后续再遇到这样事情,降低替换核心库的成本,现利用协程对网络库进行封装。理想API调用方式 launch { val response = TestReq(q = "电脑").request<TestResponse>() Toast.makeText(this, response?.result?.toString()?:"...

2020-09-23 14:24:32 4653

原创 实用Gradle-监控包体积

概述最新项目出现包体积上涨很多问题,但是确不知道是哪次提交导致的,为了避免这种后续再出现这种情况,利用gradle写了个包体积监控的任务。流程钉钉通知格式实现import org.apache.http.HttpResponseimport org.apache.http.HttpStatusimport org.apache.http.client.HttpClientimport org.apache.http.c...

2020-09-04 17:48:04 4873 2

原创 实用Gradle-过滤权限

概述 最近遇到一个问题,公司因为合规的要求需要将app申请的权限收紧,对于不必要的权限下架。但是项目中因为用到了很多第三方库,库里面有定义一大堆权限,所以没办法简单的删删减减来解决这个问题。实现println("---------------开始过滤无用权限申请-----------------")def filterPermissions = []//filterPermissions.add("android.permission.CAMERA")//...

2020-09-04 17:46:14 4874

原创 实用Gradle-优雅依赖库

概述gradle提高了android的工程化能力,它使得app的编译更加的灵活可控,今天我们主要来说说依赖三方库的那些事。早期依赖早期android项目都是单模块的,依赖关系在一起维护,所以不用考虑重复库导致的冲突问题。如下:模块化依赖随着工程越来越大,我们被迫将项目进行拆分,从之前的单模块的项目,升级成了多模块共同编译。随着模块化的进行,将会遇到不能模块依赖同一个库,一般为了保证依赖的版本一致,我们会在gradle.properties中定...

2020-09-04 17:22:35 2075

原创 优雅的网络请求

概述今天基于retrofit+kotlin来封装更优雅的网络的请求,retrofit本身就是对okhttp的一次表层封装,提供了更高的可扩展性。并且采用动态代理的方式,将真正的实现封装起来,对于用户而言只需要定义信息接口,而不必了解不需要的细节,总的来说降低的复杂度,提高了可读性、并且更加的灵活。传统的retrofitretrofit提供了同步和异步请求的方法,一般情况下我们会使用它提供的异步API,如果使用同步方法的话,我们需要自己维护线程切换,增加了使用成本。...

2020-09-04 16:13:28 4678

原创 优雅的Activity通信方式

概述android对Activity的设计采用了严格的代码隔离,两个Activity之间不经过特殊的处理很难直接进行通信(保存静态变量),坏处呢,当然就是提高了交互成本,使得开发和阅读都会变得困难。好处的话是,代码边界有效的屏蔽了代码影响的扩散,保证了整个APP的稳定性。事实上,多进程启动Activity,也都是基于充分代码隔离的基础上,设计出来的。传统交互方式代码示例说明这种交互方式,有三个问题:通过c...

2020-09-04 13:37:25 4722

原创 浅谈开闭原则

概述开闭原则是java 6大基本原则之一,而6大原则在软件开发中属于内功心法的存在,需要长期进行修炼,才能有所成就。今天就单独谈谈“开闭原则”,它的定义是:对扩展开放、对修改关闭。简单、直白的定义,确很难理解它到底想表达什么?目的想想如果软件只允许扩展,但是不允许修改会发生什么呢?旧的被测试过的代码,永远不会再次被改变,不改变意味着不会引入新的bug,不会产生影响,那系统将会一直保持稳定,只要测试保证新扩展的能力是稳定的。所以初步可以得出结论,开闭为了稳定。如果...

2020-09-03 19:02:02 4810

原创 谈谈Android热修复

概述热修复成名已久,现在才开始谈确实有点晚了,不过没关系,这里给大家提供一个比较简单的思路。目的呢?算法帮助大家深入、或者复习“类加载”机制把,挺好玩的。加载模型(双亲委派)示意图代理模式android类加载采用的是双亲委派模式,就是会将请求先委托给父加载器进行处理,处理不了自己再处理。谈到委派,很容易想到“代理模式”,事实上对于ClassLoader而言,它与parent的关系确实是代理/委托关系,对被代理类进行访问控制(如果它...

2020-09-03 17:32:42 4637

原创 android单元测试

不要被单元测试拖累!不要被单元测试拖累!!不要被单元测试拖累!!!概述 单元测试是针对系统最小单元(一般是函数、也可以是类或者模块)来进行正确性检测。我们使用单元测试的目的是优化代码质量、提高开发效率,不要一味的追求100%代码覆盖率,没有意义。优先单元测试 如果你写好了代码,再写单元测试,那一定是为了单元测试而单元测试,你一定感受不到它的好处了,或者你会说我有了单元测试,后期的重构或者改造我将更自信(我不只一次听到这种说法,单元测试验...

2020-09-03 14:28:52 4695

原创 浅谈APP技术规划

设计目的支撑前期APP快速的迭代,并且为后期重构创造条件 提升代码的可复用性 实现组件化、模块化开发 树立代码规范,引导开发流程 提升代码可维护性(灵活、扩展性高、可读)设计原则模块内高内聚 模块间低耦合 模块单一职责 模块可独立运行 模块可移植 模块可插拔组件聚合原则复用/发布等同原则(为复用性而聚合) 共同闭包原则(为可维护性而聚合) 共同复用原则(未避免不必要发布而拆分)组件...

2020-09-02 18:18:04 4958 2

原创 模块化架构设计

前言架构设计是一个不断演变的过程,当项目较小,或者项目刚刚起步的阶段,我们往往不需要关注架构设计,只有当软件膨胀到一定程度,我们才会针对当前业务,设计出适合当前阶段的架构。所以有的项目就会出现不断膨胀,不断重构的情况。那为什么不一开始就设计一个大而全的架构?我认为有以下几点:1、架构是对当前业务进行的一层抽象,当业务不稳定,或者在高速迭代的过程中,我们没办法定义出稳定的抽象层。导致哪怕架构设计好,也会在业务迭代的过程中被破坏。2、架构的过程事实上也是一个解耦的过程,而解耦越充分,相应的也会...

2020-09-02 18:10:39 8290 3

原创 无痕埋点设计方案

概述我们做的是什么事情?动态化自动埋点设计 配置化远程可视化埋点方案设计为什么做无痕埋点?现有埋点方案占有大量开发资源 现有埋点方案修改或者新增埋点需要重新发版 现有埋点方案测试复杂,容易错误或者遗漏埋点做好无痕无痕埋点可以解决什么问题?简化研发埋点工作量 实现可视化埋点 实现不发版本,修改新增埋点流程图事件汇总事件埋点,在软件开发中属于横切逻辑。需要通过面向切面的思维方式,将所有...

2020-09-02 18:08:21 4946

原创 前端组件化

传统的开发方式概述根据页面的渲染过程来编写代码结构。像:init -> getData -> processData -> bindevent -> report -> xxx 。 方法之间线性跳转,你大概也能感受这样代码弊端。随着页面逻辑越来越复杂,这条” 过程线“ 也会越来越长,并且越来越绕。加之缺少规范约束,其他项目成员根据各自需要,在” 过程线“ 加插各自逻辑,最终这个页面的逻辑变得难以维护。面向过程...

2020-09-02 18:05:57 5148

原创 浅谈设计

概述设计指导着代码的实现,帮助阅读者理清逻辑的脉络,提高代码的可读性。另一方面优秀的设计者,可以敏锐的发现程序中可能存在的变更点,提前作出准备,来应对后面可能出现的变更。设计者们有着自己的武器箱,包括但不限于:“抽象”、“隔离”、“封装”、“设计模式”、“设计思想” 。业务设计业务层的设计,是最贴近于具体实现的,它属于低级策略层(越贴近具体IO,层级越低),这一层也是最不稳定的,我们更多考虑的是它的灵活性。无疑、抽象是提高灵活性的有效手段,但是过多的抽象会让本该连贯的逻辑变的断...

2020-09-02 17:58:39 4765 2

原创 android插件化

概述 插件化是一种动态升级app功能的解决方案,不同于热修复(仅仅是修复功能),类似于RN、Weex(目的类似)。都是为了在不发版本的情况下,可以让用户用上最新的功能。不过RN、Weex还额外支持跨平台。相对于RN和Weex,插件化有以下的优缺点:优点:对于业务方,无额外的学习成本,基本无感知 性能等同于原生、可以做任何原生可以做的事情 天然代码隔离、使得插件化的代码更加的“高内聚、低耦合” 插件并发开发,开发之间互不影响缺点:稳定性差,使用了大量大反射...

2020-09-02 17:52:35 4784

空空如也

空空如也

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

TA关注的人

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