自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

csdn_aiyang的博客

业精于勤荒于嬉,行成于思毁于随。

  • 博客(238)
  • 资源 (17)
  • 问答 (1)
  • 收藏
  • 关注

原创 移动端研发技术的进化历程

移动端研发技术主要分为原生开发和跨平台开发。本章主要介绍一下移动开发技术一步一步发展的进化历程。

2024-03-13 18:59:06 1209

原创 Android 性能优化(一):闪退、卡顿、耗电、APK

性能优化自2008年智能时代开始,Android操作系统开启一路高歌智能机发展之路。时至今日Android系统性能已经非常流畅了。到了不同层次的开发者手里,技术水平参差不齐,使得应用安装到配置极好的手机上依然存在体验差的现象。App性能优化是提升用户体验的永恒主题,也成为工程者最终的使命。性能优化从用户体验角度有四个性能优化方向。

2017-07-11 17:02:27 44836 10

原创 JAVA多线程之并发与同步,Lock与Syncronized

说到线程,就不得不先说线程和进程的关系。进程是系统的执行单位,一般一个应用程序即是一个进程,程序启动时系统默认有一个主线程,即是UI线程,我们知道不能做耗时任务,否则ANR程序无响应。这时需要借助子线程实现,即多线程。由于线程是系统CPU的最小单位,用多线程其实就是为了更好的利用cpu的资源。一、多线程创建方式//线程休眠1000毫秒,sleep使线程进入Block状态,并释放资源xx.start();//启动线程,run函数运行@Override@Override。

2017-03-23 13:24:42 27005 2

原创 Android 性能优化(七):APK安装包体积优化

移动 App 特别关注投放转化率指标,而 App 包体积是影响用户新增的重要因素,而 App 的包体积又是影响投放转化率的重要因素。新业务超过要总裁审批,一般在平台组都卡掉了。

2024-04-17 11:36:44 614

原创 Android 属性动画及自定义3D旋转动画

属性动画框架,基本可以实现所有的视图动画效果。相比属性动画,视图动画一个非常大的缺陷就是不具备交互性。当某个元素发生视图动画后,其响应事件的位置还依然在动画前的地方,所以视图动画只能做普通的动画效果,避免交互发生,且效率较高使用方便。

2024-04-09 13:07:53 1109

原创 JAVA 并发编程之死锁的产生及避免

死锁可以理解为,在多线程并发竞争资源的环境下,在各自拥有锁的情况下,又去尝试获取对方的锁,从而造成的一种阻塞的现象,若无外力作用,它们都将一直阻塞下去。我们都知道 ,join方法的作用是阻塞线程,即当前线程等待挂起的线程执行结束,才继续执行。如果线程自身调用了调用join()这个方法,表示,自身挂起自身,那么线程将一直在阻塞。①互斥条件:一个资源只能被一个线程占有,当这个资源被占用后其他线程就只能等待。②不可剥夺条件:当一个线程不主动释放资源时,此资源一直被拥有线程占有。

2024-04-09 12:10:24 331

原创 Hybrid混合开发 和 JSBridge 的使用

JSBridge 简单来讲,主要是 给 JavaScript 提供调用 Native 功能的接口,让混合开发中的『前端部分』可以方便地使用平台的地图定位、相册、摄像头等 Native 功能。实际上,JSBridge 就像其名称中的『Bridge』的意义一样,是 Native 和非 Native 之间的桥梁,它的核心是 构建 Native 和非 Native 间消息通信的通道,而且是“双向通信”的通道。

2024-04-08 21:53:40 831 2

原创 JAVA JVM内存模型和GC分配和回收

JVM是(Java Virtual Machine)Java虚拟机的缩写。JVM是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。​在Java程序运行时,所有的到JVM中才能执行代码逻辑。不是直接和操作系统交互,需要jvm通过java类库解释给操作系统。​。

2024-04-04 23:27:18 739

原创 JAVA 并发编程之AQS排队同步框架

基于一个FIFO(先进先出)队列 和 一个同步状态(state)来实现线程的排队和同步。当线程尝试获取同步状态时,如果同步状态已经被其他线程占用,则将当前线程包装成一个节点(Node)并入队等待,否则直接获取同步状态。同时,AQS会确保只有队列中第一个节点的线程才能获取同步状态,其他节点需要等待前面的节点释放同步状态。

2024-03-29 16:58:38 488

原创 Java 并发编程之volatile可见性,原子操作线程不安全

原子操作:线程在工作内存的赋值指令assign,传输到仓库store,最后write写入主内存,这三步操作是一个整理,中间不会中断,就好像直接操作主存一样。使用volatile后,线程对变量原子操作值被修改了,会根据缓存一致性协议通知其他线程的缓存副本过期。在修饰的变量,在系统汇编的代码里会生成lock前缀,表示指令在多核CPU情况下,在当前处理器将缓存数据写回到系统主内存时,会引起其他CPU缓存了该内存地址的数据无效。按照原子性操作, 3、4是线程2的原子操作, 5、6、7是线程1的原子操作。

2024-03-29 15:44:34 272

原创 Android 性能优化(六):启动优化的详细流程

业内常见的app启动过程阶段一般分为「启动阶段」和「首刷阶段」。启动阶段:指用户点击icon到见到app的首页,起点为的Activity的()。首刷阶段:指用户见到app的首页到首页列表内容展现起点为Activity的onCreate,终点列表的onAttachedToWindow()。为了确保启动优化量化指标的数据能稳定和完整。启动过程中App退后台用户未登录场景特殊场景下的开屏广告,比如有复杂的联动动效站外push、deeplink拉起。

2024-03-27 14:31:29 3178

原创 Android Kotlin(六)协程的并发问题

我们知道,在 Java 中最简单的同步方式是 synchronized、Atomic、Lock等同步手段。因为是Java 的锁是阻塞式的,会影响协程的非阻塞式特性,所以在 Kotlin 协程中,不推荐使用 Java 中的同步锁。Mutex 是一个接口,lock() 方法是一个挂起函数,支持挂起和恢复,这是一个非阻塞式同步锁。虽然 Kotlin 协程是基于 Java 线程的,但是它已经脱离了 Java 原本的范畴。此时,这10个协程运行在不同的线程中,可能会出现并发问题,最终结果小于、等于10000。

2024-03-22 19:42:32 1054

原创 Flutter Widget:State 状态管理

无论是在 React/Vue/Flutter 中讨论的问题和解决的思想都是一致的。的状态应该被谁管理?Widget本身?父 Widget?都会?还是另一个对象?如复选框的选中状态、滑块的位置如颜色、动画接下来,我们将通过例子说明管理状态的不同方式:创建一个盒子,当点击它时,盒子背景会在绿色与灰色之间切换。状态_active确定颜色:绿色为true,灰色为false。

2024-03-20 15:35:08 1014

原创 Flutter 初始Widget&State 简单应用案例分析

本系列文章主要整理Flutter的知识汇总,由浅入深,从Widget的搭建到其中的原理。本文还是围绕Widget在开发中应用和理解。关于Flutter环境配置和首次创建可以参考前面文章。

2024-03-19 21:30:18 742

原创 Flutter Widget:StatefulWidget&StatelessWidget&State

Widget 将是构建Flutter应用的基石,在Flutter开发中几乎所有的对象都是一个 Widget。在Flutter中的widget 不仅表示UI元素,也表示一些功能性的组件,如:手势 、主题Theme等。而原生开发中的控件通常只是指UI元素。Flutter 中是通过 Widget 嵌套 Widget 的方式来构建UI和进行事件处理的。所以记住,。类继承自即“诊断树”;:一个 widget 可以对应一个或多个Element;与oldWidget的和key同时相等时就会用new widget去更新。

2024-03-19 19:12:32 1034

原创 Flutter 核心原理 - UI 框架(UI Framework)

Flutter 它提供了一套Dart API,然后在底层通过OpenGL这种跨平台的绘制库(内部会调用操作系统API)实现了一套代码跨多端。由于Dart API也是调用操作系统API,所以它的性能接近原生。

2024-03-14 22:33:54 1561

原创 操作系统(Android&IOS)图像绘图的基本原理

各个平台几乎所有用于开发GUI(图形用户接口)框架的,编程语言都会在操作系统提供的API之上再封装一层,将操作系统原生API封装在一个编程框架和模型中,然后定义一种简单的开发规则来开发GUI应用程序。像素的颜色是有RGB三基色组成,比如1600万即2的24次方,即每个基本色(R、G、B)深度扩展至8 bit(位),颜色深度越深,所能显示的色彩更加丰富靓丽。但是对于应用开发者来说,直接调用这些操作系统提供的API是比较复杂和低效的,因为操作系统提供的API往往比较基础,直接调用需要了解API的很多细节。

2024-03-14 19:11:43 582

原创 Flutter 开发中踩坑笔记总汇

本篇主要是收集汇总开发过程中遇到的小困惑,都是些比较常见的问题。后续开发中遇到,也会持续更新在这里。

2024-03-14 15:48:56 538

原创 Android Kotlin(五)数据流StateFlow和LiveData

在协程中,与仅返回单个值的挂起函数相反,数据流可按顺序发出多个值。数据流以协程为基础构建,可提供多个值。数据流是可通过异步方式进行计算处理的一组数据序列。所发出值的类型必须相同。

2024-03-12 20:36:47 1244 2

原创 Android Kotlin知识汇总(四)Kotlin 协程实践

Kotlin 协程是一种并发设计模式,可以在 Android 平台上让异步代码像阻塞代码一样易于使用。协程可大幅简化后台任务管理,例如网络调用、本地数据访问等任务的管理。简单来说,协程就是一种轻量级的非阻塞的线程工具API,可以用同步的方式写出异步的代码,优雅地切换线程和处理回调地狱。线程在进程中,协程在线程中。所有源文件都必须编码为 UTF-8。

2024-03-12 18:35:17 987

原创 Android Kotlin知识汇总(三)Kotlin 协程

Kotlin 协程让异步代码像阻塞代码一样易于使用。协程可大幅简化后台任务管理,例如网络调用、本地数据访问等任务的管理。本主题介绍如何使用 Kotlin 协程解决以下问题,从而让您能够编写出更清晰、更简洁的应用代码。

2024-03-12 16:01:27 1065

原创 Android Kotlin知识汇总(二)代码最佳实践

本主题重点介绍 Kotlin 语言在 Android 开发过程中最有用的一些方面。同时是我们普遍遵循的清晰硬性规则,而避免给出真人或工具无法简明地遵循的建议。所有源文件都必须编码为 UTF-8。

2024-03-11 19:38:58 952 1

原创 Android Kotlin(一)简洁的编程语言-关键字

在 2019 年 Google I/O 大会上宣布今后将优先采用 Kotlin 进行 Android 开发。Kotlin 是一种富有表现力且简洁的编程语言,不仅可以减少常见代码错误,还可以轻松集成到现有应用中。如果您想构建 Android 应用,建议您从 Kotlin 开始着手,充分利用一流的 Kotlin 功能。

2024-03-11 18:17:01 1211

原创 HarmonyOS(二)Ability应用模型概述

通过了解Ability的概念及Stage模型后,后面章节会再详细解决UIAbility的开发使用。另外,预留一个问题,大家思考:UIAbility与方舟框架ArkUI之间的关系。

2024-03-07 19:03:52 1171

原创 HarmonyOS (一)ArkTS起源及UI框架

总体而言,ArkUI开发框架通过扩展成熟语言、结合语法糖或者语言原生的元编程能力、以及UI组件、状态管理等方面设计了统一的UI开发范式,结合原生语言能力共同完成应用开发。这些构成了当前ArkTS基于TS的主要扩展。

2024-03-07 17:35:14 979

原创 Android 架构MVI、MVVM、MVC、MVP

简单了解一下MVI、MVC、MVP和MVVM。

2024-02-28 23:00:34 1108

原创 Java CAS原子操作过程及ABA问题

CAS(Compare And Swap,比较并交换),通常指的是这样一种原子操作:针对一个变量,首先比较它的内存值与某个期望值是否相同,如果相同,就给它赋一个新值。CAS是一个不可分割的原子操作,并且其原子性是直接在硬件层面得到保障的。CAS是乐观锁的一种实现方式,Java原子类中的递增操作就通过CAS自旋实现的。CAS是一种无锁算法,在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步。

2024-01-18 19:39:19 411

原创 浅谈敏捷开发的思维

不是一种方法论也不是开发软件的具体方法更不是一个框架或者过程“敏捷”是一套价值观(理念)和原则,帮助团队在软件开发过程中更好地做出决策。简而言之,就是遵循了“敏捷”这一开发原则的开发方法。“敏捷并不意味着一味强调速度,而是轻量和高效。「百度百科」是这样说的敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。

2024-01-16 17:30:37 970

原创 Kotlin:run、runCatching、runBlocking、runInterruptible

run和runCatching是 Kotlin 标准库的一部分,可以在所有支持的平台上使用。runBlocking和runInterruptible是 Coroutines 协程的一部分。

2024-01-16 14:25:20 1444

原创 Android 开发规范(基础版)

style的name命名使用大驼峰命名法,几乎每个项目都需要适当的使用 styles.xml 文件,因为对于一个视图来说,有一个重复的外观是很常见的,将所有的外观细节属性(colors、padding、font)放在 styles.xml 文件中。项目的代码时间时间很长,经过太多人手,代码的规范性堪忧,目前存在较多的比较自由的「代码规范」,这非常不利于项目的维护,代码可读性也不够高。分析现有项目的代码的情况,输出的『定制化规范』文档,用于提高代码的可读性和可维护性。

2023-07-15 22:01:31 981

原创 Android 图片加载库改造

1、异步任务处理返回后,activity已经销毁,此时进行加载图片,会报异常You cannot start a load for a destroyed activity ,App会崩溃1). 一个是网络请求,但由于rxjava异常拦截的原因,不会崩溃@Overrideif (data!2) 另一个是其他异步任务回调中处理图片就会崩溃了,类似下边的代码@Overridetry {});}.start();finish();

2023-07-15 21:03:42 679

原创 Android App首页全局黑白化方案探索

关于黑白化页面,这几年是比较常见的场景。比如,在清明节或特殊时政,各大APP都会进行黑白化处理。普通小白刚接到需求的时一定会感觉是不是好麻烦,要搞一套换肤吗?下面有三种实现方案,一起来探索吧!最后咱们再总结一下黑白化方案:使用了 ColorMatrix 设置饱和度为 0,设置到 Paint 中,让根布局拿着这个 Paint 去进行重绘。

2023-06-12 11:41:07 619

原创 Android 手机号344格式化,字符串拼接和EditText输入框

国内手机号一般11位数字,在登录注册等页面经常会用到,其他信息介绍页面也可能会用到手机号的显示。

2023-05-10 10:20:18 314 1

原创 通俗易懂讲解,彻底弄懂 https 原理本质(五)https 的过程

摘要:单向加密算法,比如md5对证书整个内容加密的结果就叫摘要,也叫做证书的指纹;签名:小明用私钥🔑对摘要进行加密出来签字串,就叫做签名。验签:用公钥对签名进行解密出来的摘要和原来的对比,就叫做验签。

2023-03-27 19:25:20 488

原创 彻底弄懂 https 原理本质(四)数字证书

信息的传输过程中,如何保证内容不被篡改,即信息的完整性?结合前面学到的加密知识,我们可以用单向加密算法。比如,用 md5 加密算法,小明👦给小花👧发的内容用 md5 作一次加密运算,会生成一个唯一的字符串,我们把这个字符串起个名,叫做“摘要🍎”。小明👦会把单向加密算法 md5, 以及md5运算的结果摘要🍎,一块发给小花👧。小花收到内容后,用md5对内容进行加密算法,生成新的摘要。小花👧将新的摘要🍎和原先的摘要进行对比,如果相等,说明没有被人篡改过。如果不相等,说明内容被别人修改过了。

2023-03-27 18:44:34 405

原创 彻底弄懂 https 原理本质(三)加密漏洞

“没用挖补了的墙角,只有不努力的小三” 。有志气的人都不轻言放弃,下面看老王🐶如何进行反攻。

2023-03-27 17:17:35 422

原创 彻底弄懂 https 原理本质(二)加密过程

小明选择使用效率高的‘对称加密’密钥 S🔑方式给小花传递情书,再通过通过效率慢的‘非对称加密’🔐方式将密钥 S🔑二次加密。而且此时‘非对称加密’工作量很小,密钥 S🔑安全的传输给对方之后,后面的通信就直接使用对称加密了,这样效率就高了。

2023-03-27 16:08:49 316 1

原创 通俗易懂讲解,彻底弄懂 https 原理本质(一)加密知识

如果对https的过程一知半解,在每次面试时,面试官很可能就问你这个问题。相信很多人对 https 弄不清楚,只是知道 https是网络传输安全加密用的,背后的原理和过程并不是很清楚。其实https 的原理过程,并没有那么复杂,只是有些文章没有说清楚,这样的文章看多了,就迷糊了。MD5 : 相信这个大家都都熟悉了,一个明文,md5以后,对应一个唯一的密文。加密按照加密方式,可以分为以下三种方式。单向加密、对称加密、非对称加密。进行加密和解密(公钥加密私钥解密,私钥加密公钥可以解密);

2023-03-20 10:22:40 540 3

原创 Android 动态代码设置view宽高参数,运行后UI大小没有改变问题

日常开发中遇到一个需求,就是根据业务逻辑,动态改变一个view控件的大小。这种需求也是比较常见的,但是小白比较容易遇到一个小问题,就是代码重新设置了view的宽高大小,运行后发现view没有发生改变。

2023-02-24 19:51:05 1331

原创 管理者的角色误区和角色定位检验

“吾日三省吾身”,如果你立志成为一名优秀的管理者,保持经常“照镜子”,可以在自我反思和他人反馈中一点点改变自己,变成真正做到那个以身作则、带人成事的人。

2023-01-11 23:03:37 305

办公之连打印机及邮箱配置.zip

解压包后会看见三个文档,里面分别是介绍windows/Mac电脑如何安装连接打印机及配置公司邮箱的方法。对于初入办公司的同学非常实用。

2020-07-06

Android 二维码扫一扫demo

https://mp.csdn.net/postedit/78983090 需要看文章的请点击连接。关于二维码的生成及原理,这篇文章都说的很清楚。有什么问题可以进qq群569614530

2020-01-06

ExpandableListViewDemo.zip

仿QQ联系人页面,对好友和群聊进行分组。RadioGroup.OnCheckedChangeListener进行监听切换,HttpURLConnection进行网络接口请求,JSONObject进行转换成String类型。

2019-11-27

TestApplication.zip

一个Androd的小项目,实现了模块化和组件化,实现阿里路由进行页面跳转。代码简洁,小白教程。博文讲解链接:https://blog.csdn.net/csdn_aiyang/article/details/82152538

2019-05-08

download-manage

应用更新下载安装APK,兼容6.0、7.0、8.0,非常有价值的demo。本人踩坑记https://blog.csdn.net/csdn_aiyang/article/details/85780925

2019-01-09

Android 短视频录制demo

Android短录制的demo。代码仅供参考开发。

2018-09-20

RealVNC532.zip

mac服务器,连接工具。jenkis打包服务器连接设置。破解版。

2018-03-22

charles402

提供一个可以在mac操作系统下抓包工具charles破解版。

2018-01-24

MVPDemo练习

http://blog.csdn.net/csdn_aiyang或https://github.com/aiyangtianci/MVPDemo

2018-01-08

ZXing资源jar包

欢迎到我博客http://blog.csdn.net/csdn_aiyang,有写关于而二维码、条形码的使用。

2018-01-05

讯飞语音合成

该demo使用Android Studio工具,API用到26,可在Gradle.app里修改,这样可以不用下载更新AS的Android SDK 版本。

2017-12-14

Bluetoothdemo

蓝牙相关技术的demo,界面优美防原生。详情请看博文http://blog.csdn.net/csdn_aiyang/article/details/77933797

2017-09-11

音频震动管理

该练习,是对Android的音频音量的管理和对手机震动的实现。详情请看博客,http://blog.csdn.net/csdn_aiyang/article/details/77893052

2017-09-08

RongYunDemo

融云的demo,即时通讯实现聊天对话框等功能,项目稳定,代码清晰,方便移植到你的项目中,解决业务需求。好东西,多多分享,你值得拥有。

2017-08-29

流行算法排序实用案例

这个demo里写了快速、冒泡、二分、插入、希尔等排序算法的实例,并进行跑分排名。本人测试结果最优算法是插入排序。

2017-08-21

ToolBar封装抽象类统一项目风格

Toolbar是活动的标题栏,把ToolBar 封装成一个抽象Base类,可以加快开发的脚步使代码更整洁清晰。这里我附上源码,非常实用,新手必备,加快开发速度和保持项目统一风格。

2017-06-01

自定义日历-实现签到订约功能

签到送积分的系统,使用ViewPager+Releteview+Calendar+算法实现。本人因为真心觉得很简单实用。免费分享,希望对你有帮助。

2017-04-26

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

TA关注的人

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