Android、Java、性能优化等
文章平均质量分 78
Android、Java等基础知识
baiiu
每天前进三十公里
展开
-
iOS object-c 常用API汇总
本文为入门iOS开发,object-c语法汇总。用于日常查阅。原创 2024-06-02 08:50:38 · 455 阅读 · 0 评论 -
【置顶】 博文汇总
23年底了,想来也工作十年,也一直在csdn输出。这十年,从业务层做到性能优化,再到音视频,再到播放器稳定性相关的native crash。也积累了不少文章,在此汇总一下;另外还有大量的深度源码分析草稿,之后也整理发出来吧。原创 2023-12-15 18:50:44 · 1479 阅读 · 0 评论 -
Android源码分析 理解Refbase
最近解决稳定性问题,遇到sp问题,本文就简单梳理RefBase和sp、wp下。原创 2023-12-13 15:02:06 · 560 阅读 · 0 评论 -
Android 性能优化 Systrace使用
汇总System trace使用,学习下音视频如何用Systrace查看,有心得了会贴上来。原创 2022-10-10 00:15:02 · 1272 阅读 · 0 评论 -
Android 反编译与防逆向
前言本文先水一篇草稿,之后可能会经常用到反编译与防逆向的代码,暂时都往这里堆一堆代码吧。反编译工具强烈推荐:https://github.com/skylot/jadxbrew install jadxjadx xxx.apk混淆防逆向原创 2022-05-12 21:26:17 · 493 阅读 · 0 评论 -
Kotlin 常用API汇总
Any类,equals和hashCode方法Kotlin 中的==等同于调用 equals() 函数,比较两个对象引用是否相等要用 === 操作符。用 ==操作符时不需要担心空安全,a == b 等同于 a?.equals(b) ?: b == null。和Java一样,复写equals()方法同样遵循复写equals()方法遵守的约定,需要同时复写hashCode()方法。public open class Any public constructor() { public open原创 2022-04-19 17:53:38 · 3097 阅读 · 0 评论 -
Android基础 硬件加速和软件绘制 invalidate和RequestLayout流程
本文梳理了最简单的情况,在子View(非ViewGroup)调用invalidate的流程,且忽略绘图缓存,即mLayerType == LAYER_TYPE_NONE。如有错误请指正。软件绘制从代码可知:View如果不可见&&无动画,ViewGroup不可见 && 无动画 && 无过渡动画不会执行invalidate软件绘制会触发与d...原创 2020-04-06 23:16:38 · 1453 阅读 · 2 评论 -
Android基础 Bitmap基础
1. 图片格式GIF: 支持动画JPG: 有损压缩,无透明通道,适用于色彩丰富的图片PNG: 无损压缩,有透明通道WEBP: 支持有损无损压缩,支持透明、动画PNG 适用于所含颜色很少、具有大块颜色相近的区域或亮度差异十分明显的较简单的图片JPG 使用于需要高保真的较复杂的图像,因为PNG 虽然能无损压缩,但图片文件比较大;同时JPG的图像压缩算法比PNG耗时WEBP:体积较小,...原创 2020-04-14 21:45:57 · 468 阅读 · 1 评论 -
Android 性能优化
优化目的尽量减少主线程操作尽量减少GC优化流程首先通过SM(帧率)对App的流畅度进行测试评估(引入APM情况下)。然后从最简单的App UI层入手,优化App的UI来提升流畅度。接着通过lint静态扫描发现一部分代码中存在的性能问题,然后进行优化。最后再进一步深入的分析和解决App逻辑层和IO层存在的问题1. 布局优化减少布局复杂度尽量减少不必要...原创 2019-02-17 20:34:08 · 283 阅读 · 0 评论 -
Android 项目架构 组件化基础介绍
前言最近尝试使用组件化进行项目重构,在此记录一下过程并总结。本篇文章算是建立在前人们的肩膀上进行的总结,会有些摘抄,供以后在不断实践中打磨修正。什么是模块化、组件化、插件化模块化 Modular programming Modular programming is a software design technique that emphasizes separating th...原创 2018-05-10 06:57:04 · 612 阅读 · 0 评论 -
Android 性能优化 冷启动速度优化
前言本篇文章对app启动速度进行优化。先了解 Android 性能优化 基本概念应用是如何启动的,会对此有帮助。1. 应用的启动模式冷启动 Cold start 当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。 冷启动因为系统会重新创建一个新的进程分配给它,所以会先创建和初始化Application类,再创建和初始化MainActivit原创 2016-11-30 17:48:07 · 5036 阅读 · 0 评论 -
Android 性能优化 内存优化 How to do
前言在前两篇对Android如何管理内存有一定的了解下,所以本篇文章就是如何进行内存优化。因为Android给每个应用分配的内存是有限的,所以要保证应用占用的内存最小,这样提高让进程长时间存活的概率,并且不易发生OOM。1. 内存问题内存泄露内存抖动内存消耗过大内存泄漏概念(Memory Leaks): 就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,原创 2016-11-21 23:44:12 · 1886 阅读 · 0 评论 -
Android 性能优化 内存优化 How Android Managers Memory
前言在上篇 Android 性能优化 内存优化 基本概念对Android整个系统有了初步认识,即Android在系统上做了哪些操作来节约内存,这篇文章就主要介绍Android是如何进行内存管理的。在 Android应用开发性能优化完全分析这篇文章中对Android内存性能优化分析中,主要从两个方面进行分析,一是系统级内存管理,二是应用级内存管理。而这种分法是最清晰易懂的,所以本篇文章也从这两个方面入原创 2016-11-20 12:08:55 · 2171 阅读 · 0 评论 -
Android 性能优化 基本概念
前言在学习Android内存性能优化时,发现需要对Android系统的内存概况得有个概况了解,便有了此篇文章。 这篇文章仅仅介绍相关于内存的,即辅助理解 官方文档 How Android Manages Memory。将会从Android启动开始,一直到因为内存不足开始杀死进程回收内存结束,方便后来的学习。内容太多,将分两篇写。本篇主要介绍基础概念,下篇介绍Android如何进行内存管理。1.原创 2016-11-17 23:52:20 · 1126 阅读 · 0 评论 -
Android 性能优化 UI优化
前言:本篇文章主要学习UI性能优化。1. 应用UI卡顿的原理1.1 原理用户感觉到卡顿的原理就是在渲染时出现了掉帧。Android系统要求 1s内渲染60帧,即渲染1帧必须要在16ms完成。如果你的界面没有在16ms内准备好一帧,所以就不会进行渲染,屏幕也就不会刷新。结果就是用户就是盯着一帧看了32ms,而不是16ms,因为刷新频率的不一致,就使用户感知到了卡顿。1.2 为什么是60fps官方出的性原创 2016-11-15 23:52:14 · 1546 阅读 · 0 评论 -
Android 性能优化 StrictMode使用
前言:StrictMode,严格模式,算是比较简单的性能检测方法。简单介绍,技术小黑屋写的很详细。1. StrictMode概念:StrictMode is a developer tool which detects things you might be doing by accident and brings them to your attention so you can fix them原创 2016-10-25 00:32:43 · 1332 阅读 · 0 评论 -
Android 性能优化 概念介绍
前言:本篇文章是一篇摘录,目的是从开头就进行有效的性能优化学习,并遵从正确的方法论。其中摘录内容来自 张明云 、 稀有猿诉 和 MeloDev,十分感谢。1. 为什么要性能优化开始着手进行性能优化,是意识到了这块对于一个应用的重要性,以及长期重要性;不仅仅满足于功能、业务本身,还要着眼于代码的效率、用户的体验。另外,技术是为产品服务的。2. 什么是性能对于Android应用程序来讲分为三个方面:一原创 2016-10-23 17:25:36 · 995 阅读 · 0 评论 -
Android 项目框架 使用MVP开发
前言在Android中使用 MVP 来开发已经出来很久了,刚好Google又出了一系列的architecture samples,在此就整理一下对于MVP的认知和实践总结,这篇文章会随着使用经验的丰富而不断更新。1. 介绍MVC在没有使用MVP开发之前,我们一直使用的都是MVC模式,其实也不算的MVC,一般我们听到的都是Android中的Activity既是View,又是Controller,即Ac原创 2016-05-14 00:01:33 · 8715 阅读 · 5 评论 -
项目架构 the clean architecture笔记
the android clean ArchitectureThe clean system should be:Independent of FrameWorkTestableIndependent of UIIndependent of DatabaseIndependent of any external agencyEntities: business object of app原创 2015-11-26 22:50:21 · 1004 阅读 · 0 评论 -
EffectiveJava第十一章:序列化
**对象序列化(object serialization)**API,它提供了一个框架,用来将对象编码成字节流,并从字节流编码中重新构建对象。 序列化:将对象编码成一个字节流 反序列化:将字节流编码成对象这一章在工作很少用,不能理解很多74. 谨慎的实现Serializable接口实现Serializable接口可以很轻易的实现序列化,但实际上为了序列化而付出的长期开销往往是实实在在的,它的代价原创 2017-03-21 22:19:19 · 471 阅读 · 0 评论 -
EffectiveJava第九章:异常
充分发挥异常的有点,可以提高程序的可读性、可靠性和可维护性。 如果使用不当,它们也会带来负面影响。57. 只针对异常的情况才使用异常异常应该只用于异常的情况下,它们永远不应该用于正常的控制流。乱用异常是应该的,不要在有更好的方案下选择使用异常包裹代码异常机制的设计初衷是用于不正常的情形,所以很少会有JVM的实现对它们进行优化,使得与显示的测试一样快速把代码放在try-catch块中反而阻止了原创 2017-03-21 22:15:29 · 513 阅读 · 0 评论 -
EffectiveJava第八章:通用程序设计
讨论Java语言的具体细节,讨论了局部变量的处理、控制结构、类库的用法、各种数据类型的用法,反射(reflection)和本地方法(native method)的用法。45. 将局部变量的作用域最小化将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能。在第一次使用局部变量的地方声明它。 如果变量在使用之前声明,这只会造成混乱,不利于阅读; 在代码块之外声明变量的话,该变原创 2017-03-21 22:13:45 · 509 阅读 · 0 评论 -
EffectiveJava第七章:方法
本章讨论方法(构造方法、普通方法)设计的几个方面:如何处理参数和返回值如何设计方法签名如何为方法编写文档38. 检查参数的有效性绝大多数方法和构造器对于传递给它们的参数值都会有某些限制。应该在文档中清楚的指明所有这些限制,并在方法体的开头处检查参数,以强制施加这些限制。这样就遵照了应该在发生错误之后尽快检测出错误这个原则。传递无效的参数值给方法,这个方法在执行之前先对参数进行校验,那么就能原创 2017-03-21 22:10:24 · 472 阅读 · 0 评论 -
EffectiveJava第六章:枚举和注解
讨论枚举和注解的最佳实践。30. 用enum代替int常量枚举类型(enum type)是指由一组固定的常量组成合法值得类型,在编程语言还没有引入枚举之前,表示枚举类型的常用模式是声明一组具名的int常量,称作int枚举模式。int枚举模式的不足它在类型安全性和使用方便性方法没有任何帮助采用int枚举模式的程序是十分脆弱的。因为int枚举是编译时常量,被编译到使用它们的客户端中,如果int值发生原创 2017-03-21 22:08:49 · 575 阅读 · 0 评论 -
EffectiveJava第五章:泛型
本章教你如何最大限度的使用泛型,又能使整个过程尽量简单。23. 请不要在新代码中使用原生态类型声明中具有一个或多个类型参数的类或接口,就是泛型类或接口。泛型类和泛型接口统称为泛型(generic type)。 每个泛型都定义一个原生态类型(raw type),即不带任何实际类型参数的泛型名称。泛型有子类化的规则,List是原生态类型List的一个子类型,而不是参数化类型List的子类型。Lis原创 2017-03-21 22:03:49 · 657 阅读 · 0 评论 -
EffectiveJava第四章:类和接口
本章阐述一些指导原则,可以帮助你更好的利用这些元素,设计出更加有用、健壮和灵活的类和接口。13. 使类和成员的可访问性最小化信息隐藏(信息封装):的概念: 设计良好的模块会隐藏所有的实现细节,把它的API与它的实现清晰的隔离开来。然后模块之间只通过他们的API进行通信,一个模块不需要知道其他模型的内部工作情况。 这是软件设计的基本原则之一。信息隐藏可以有效的解除组成系统的各模块之间的耦合关系原创 2017-03-21 22:00:33 · 523 阅读 · 1 评论 -
EffectiveJava第三章:对于所有对象都通用的方法
Object类的所有非final方法(equals、hashCode、toString、clone、finalize)都有明确的通用约定general contract,因为这些方法被设计成是要被复写的override。 任何一个类,它在覆盖这些方法时,都必须遵守这些约定;如果违法的话,依赖于这些约定的类(HashMap和HashSet)就无法结合该类正常工作。8. 覆盖equals时遵守的通用约原创 2017-03-21 21:57:07 · 430 阅读 · 0 评论 -
EffectiveJava第二章:创建和销毁对象
大多数规则都源于少数几条基本的原则。清晰性和简洁性最为重要: 模块的用户永远也不应该被模块的行为所迷惑; 模块要尽可能小,但又不能太小; 代码应该被重用,而不是被拷贝; 模块之间的依赖性应该尽可能地降到最; 错误应该尽早被检测出来,最好是在编译时刻。模块:是指任何可重用的软件组件,从单个方法,到包含多个包的复杂系统,都可以是一个模块。本书关心如何写出 清晰、正确、可用、健壮、灵活和可维护的原创 2017-03-21 21:55:20 · 421 阅读 · 0 评论 -
EffectiveJava 概述
大多数规则都源于少数几条基本的原则。清晰性和简洁性最为重要:模块的用户永远也不应该被模块的行为所迷惑;模块要尽可能小,但又不能太小;代码应该被重用,而不是被拷贝;模块之间的依赖性应该尽可能地降到最;错误应该尽早被检测出来,最好是在编译时刻。模块:是指任何可重用的软件组件,从单个方法,到包含多个包的复杂系统,都可以是一个模块。本书关心如何写出 清晰、正确、可用、健壮、灵活和可维护的程序来。原创 2017-03-21 21:54:04 · 456 阅读 · 0 评论 -
Java基础 Callable、Future、FutureTask、CompletionService的使用
文章目录前言1. 基本接口介绍2. Callable、Future、FutureTask基本使用2.1 使用Callable2.2 使用FutureTask3. ExecutorCompletionService使用结语:前言本篇文章介绍Callable、Future、FutureTask、CompletionService的基本使用。创建线程任务的三种方式,之前两种都是Runnable,第三...原创 2018-12-24 08:20:02 · 363 阅读 · 0 评论 -
Java 异常 介绍
前言Java异常概念梳理。1. 异常体系介绍异常:异常是程序中的一些错误异常体系: 可以看出,Throwable是Java所有异常和错误的父类。 Throwable及其所有的子类都具有可抛性。Throwable有两个子类:Error: Error为错误,是程序无法处理的,如StackOverflow、OutOfMemoryError、ThreadDeath等,出现这种情况你唯一能做的就是听之原创 2017-03-19 19:53:58 · 538 阅读 · 0 评论 -
Java 注解 详细介绍
前言Java注解介绍1. 注解中最重要的三个类Annotation、ElementType、RetentionPolicy这三个类是注解中最重要的类,没有这三个类就没有注解,其中Annotation是接口,其余两个是枚举。 所有的注解都基于这三个类,所谓的元注解也是用这三个类生成的,只不过可修饰的元素(ElementType)为ANNOTATION_TYPE罢了,你也可以写个元注解。Annota原创 2017-03-17 00:16:23 · 981 阅读 · 0 评论 -
Java基础 equals()、hashCode()和 == 区别
在说这些的比较前,必须先要声明一些约定,违法了约定,谈他们的区别简直是不可理喻。1. hashCode()设计原则:Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently retu原创 2016-10-22 23:44:41 · 528 阅读 · 0 评论 -
Java 获取指定时间的前一天Date
开发过程中需要获取指定Date时间的前一天。本来觉得挺简单的,用Calender.roll()方法回滚一天就行了,但是在测试过程中发现不对经。于是在这记录一下。代码如下:public class DateClass { public static void main(String[] args) throws ParseException { getYesterDayDate("2016原创 2016-04-07 21:01:41 · 5478 阅读 · 0 评论 -
Java IO流基础
Android开发中,使用框架多了,忘记IO流基本写法,比如解析网络InputStream时。趁着放假,整理一些相关基础。File类:createNewFile(); 创建文件,creates a new, empty filemkdir(); 创建文件目录,Creates the directory mkdirs(); 创建多层文件目IO流:原创 2016-04-04 11:05:45 · 706 阅读 · 0 评论 -
Java 正则表达式
1. 概述正则表达式:符合一定规则的字符串。 一般不常用。但要是用起来,却能解决大问题。在这里对正则表达式整理一下。2. 正则表达式相关类介绍java.util.regex.Pattern:A compiled representation of a regular expression. 正则表达式的编译表现形式。A regular expression, specified as a str原创 2016-04-03 11:27:53 · 465 阅读 · 0 评论 -
Java基础
进制表示:八进制以0开头 十六进制以0x开头原创 2016-03-15 10:29:54 · 1477 阅读 · 0 评论 -
Android RxJava 自定义操作符基础和Subject介绍
前言掌握RxJava自定义操作符能大大方便开发,所以本文将介绍RxJava自定义操作符。一般在自定义操作符会和Subject类连用,所以文章有两个部分:自定义操作符和Subject。1. 自定义操作符RxJava提供了两种自定义操作符的方式:使用Observable.lift(Operator)使用Observable.compose(Transformer).lift是对 Subscriber 进行操作原创 2016-07-16 12:51:14 · 883 阅读 · 0 评论 -
Android 依赖注入框架 Dagger2使用
前言Dagger 2这个匕首确实很难上手,上手后又比较难瞬间掌握,可以这么说,刚开始使用就是用来尝(zhuang)鲜(b)的,但相信随着使用的加深,会不断体会到它对于整个项目架构的极强辅助作用,能使整个项目变得更清晰。它毕竟是一个依赖注入DI框架,Spring在服务器开发中起到的作用相信它也能。在了解使用前,先了解概念,什么是控制反转,什么是依赖注入。原创 2016-06-15 08:00:03 · 1251 阅读 · 0 评论 -
Android RxJava操作符一览
前言把现在接触到的操作符全部整理进来,方便查阅,遇到新的也会添加进来。和RxJavaLearn 的README.md同步更新。操作符决策树直接创建一个Observable(创建操作)组合多个Observable(组合操作)对Observable发射的数据执行变换操作(变换操作)从Observable发射的数据中取特定的值(过滤操作)转发Observable的部分值(条件/布尔/过滤操作)原创 2016-06-10 11:40:40 · 6860 阅读 · 2 评论