主页

Android设计模式-更优雅实现复杂的逻辑关系

我对设计模式的个人理解 设计模式是为了更优雅地解决一些业务上必须产生强耦合联系的逻辑而产生的一些解决方案 设计模式不是必须的,相反,不使用设计模式在某些情况下甚至会让你的代码更加简洁易读 那么为什么我们仍然需要使用设计模式呢? 因为在项目中,只有你自己能读懂自己的代码这样是不行的,当然,你可以对产生业务耦合的代码使用尽可能详细的注释来说明你的方法做了什么业务,怎么样做的这个业务,但是注释相较于逻辑是有滞后性的,开发者可能不会有精力在修改完业务之后还来得及对注释进行修正。 所以,我们引入设计模式,将大段大段的逻辑拆分成尽可能小的小点 设计模式并不难,难就难在怎么样找到适合使用的场景 创建型 建造者模式 建造者模式是提前预设定的相关方法来一步步完善对象的功能,最后...

阅读更多

Android高性能-使用NDK来计算Bitmap最大像素区域

之前在项目需求中有一个要求,输入一张Bitmap,该Bitmap可能是A8的透明通道位图,也可能是8888的PNG图片,要求我计算出该位图中包含像素的最小面积,比如一张100x100的图片左上角(1,1)和中间(50,50)有像素,其他地方都是透明的,需要输出一个Rect,为left 1,top 1,right 50,bottom 50 这个问题就类似OpenCV中的连通域计算一样,我当时是使用RenderScript来实现的,但是后面我换了一台Android 13的设备,发现之前编写的RS脚本已经不是用GPU计算了,用CPU来进行计算,这样下来本来30ms计算出来的东西,现在可能要20s左右才能出结果,迫不得已需要寻找更通用的解决方案 NDK集成到项目 NDK集成还是那个老生常...

阅读更多

我的2022

今年比去年更魔幻了,那些人加速让我失去了对他们的信任 今年12月初不再进行疫情管控了,今年我被累计管控的时间至少长达一个月,我真的想不明白,我很混沌,他们也很混沌,但是今年因为封控发生的事一件一件在我的眼前,就像是走马灯一样,我这辈子都不会忘记,贵州,乌鲁木齐,上海在今年发生的事情,真的太可怕了 但是让我更难受的是好像不知道未来会怎么样发展,我希望这样的状态不会持续太久,希望能够看到未来的发展方向 than 今年和去年不太一样,去年的这个时候我已经专升本读了半年了看,在学校里虽然老师教不了太多知识,但是我有了一年多几个月的时间沉淀自己 在去年结束的时候,我仍然在琢磨不定,到底是应该走我比较擅长的Android方向,还是走可能会有更大发展方向的后端方向?为此我想了很多,也犹豫了...

阅读更多

AndroidRenderScript的简单使用

配置环境 Android官方好像说RenderScript已经停止维护了,但是相比较Vulkan我感觉RenderScript的学习成本更低,因为RS脚本更像C语言,使用起来简单方便,在图片处理的速度上也不亚于NDK,一些简单的图片处理需求使用RS脚本还是比较方便的 我使用的RS脚本是AndroidX库里面的,没有使用support库是因为打包以后的体积更大 根据官网的描述,我们首先在模块级的Gradle文件下添加以下配置 android { compileSdkVersion(28) defaultConfig { minSdkVersion(9) ...

阅读更多

Android自定义View的过程和应用

自定义View的流程 graph TD; 开始 --> 重载三个构造函数:进行一些初始化操作,并且获得自定义属性 重载三个构造函数:进行一些初始化操作,并且获得自定义属性 --> onMeasure:测量View自身的大小 onMeasure:测量View自身的大小 --> onSizeChanged:view大小确定的时候回调,在这个方法中确定view的宽高 onSizeChanged:view大小确定的时候回调,在这个方法中确定view的宽高 --> onLayout:确定子view的位置参数 onLayout:确定子view的位置参数 --> onDram:进行绘制,可以调用invalidate进行重绘 onDram:进行绘制,可以调用...

阅读更多

Kotlin协程学习

协程的介绍 Coroutines are computer program components that generalize subroutines for non-preemptive multitasking, by allowing execution to be suspended and resumed. Coroutines are well-suited for implementing familiar program components such as cooperative tasks, exceptions, event loops, iterators, infinite lists and pipes. According to Donald Knu...

阅读更多

Android问道--理解上下文Context

Context就是上下文对象,是Android常用的类 四大组件都会涉及到Context,理解了Context会更有助于学习四大组件的原理 Context的关联类 Context是一个应用程序环境信息的接口,在开发过程中我们经常使用Context,其使用场景分为两大类 使用Context调用方法,比如启动Activity,访问资源,调用系统服务都是需要通过Context调用 调用方法时传入Context,比如创建Dialog或弹Toast Activity,Service,Application都间接继承于Context,我们可以计算出一个应用程序进程有多少个Context, 该数量等同于Activity和Service的总数+1,额外的+1是Applica...

阅读更多

Android问道--四大组件的工作过程-2-广播与内容提供者

广播的注册发送和接收过程 广播作为四大组件之一,使用频率没有Activity这么高,但是广播的工作过程也是有必要了解的,我们将从三个方面讲解广播,分别是注册,发送和接收 广播的注册过程 广播的注册就是广播接收者注册自己感兴趣的广播,广播的注册分为两种,分别是动态注册和静态注册 静态注册在应用安装的时候由PackageManagerService来完成注册过程 动态注册的过程是复杂的,时序图如下所示 sequenceDiagram 调用 ->> ContextWrapper : registerReceiver activate ContextWrapper ContextWrapper ->> ContextImpl : regist...

阅读更多