- 博客(97)
- 资源 (4)
- 收藏
- 关注
原创 Android 性能优化总结
性能的优化是一个老生常谈的点,也是一个比较重要的点。做过一点性能优化的工作,现在对工作中的优化点做一个总结。如有错误,还请指正。有哪些方面需要优化在平时的优化过程中我们需要从哪几个点来优化呢?其实我们平时自己一定也用过软件,在使用软件的过程中有没有什么想吐槽的呢?“这个 app 怎么还没下载完!”、“太卡了吧!”、“图片怎么还没加载出来!”、“怎么刚进去就卡了!”、“这么点了一下就退出了!”等等,是不是有这样的想法?这些想法其实包含了我们今天要说的内容,就是从哪些方面来优化我们的 APP ,我总结了以
2021-04-13 21:53:51 263
原创 Android 性能优化总结 - 概要
性能的优化是一个老生常谈的点,也是一个比较重要的点。做过一点性能优化的工作,现在对工作中的优化点做一个总结。如有错误,还请指正。有哪些方面需要优化在平时的优化过程中我们需要从哪几个点来优化呢?其实我们平时自己一定也用过软件,在使用软件的过程中有没有什么想吐槽的呢?“这个 app 怎么还没下载完!”、“太卡了吧!”、“图片怎么还没加载出来!”、“怎么刚进去就卡了!”、“这么点了一下就退出了!”等等,是不是有这样的想法?这些想法其实包含了我们今天要说的内容,就是从哪些方面来优化我们的 APP ,我总结了以
2021-04-13 19:36:01 190
原创 Android 性能优化 - 操作流畅度优化
为什么会卡顿为什么卡顿之前,我们先需要简单了解一点硬件相关的知识。就是在界面绘制的过程中, CPU 主要的任务是计算出屏幕上所有 View 对应的图形和向量等信息。 GPU 的主要任务就是把 CPU 计算出的图形栅格化并转化为位图,可以简单理解为屏幕像素点对应的值。如果操作过程中卡顿了,一般就是 CPU 和 GPU 其中的一个或者多个无法短时间完成对应的任务。一般而言,CPU 除了需要计算 View 对应的图形和向量等信息,还要做逻辑运算和文件读写等任务,所以 CPU 造成卡顿更常见。一般也是通过减少
2021-04-13 18:58:33 407
原创 Android 性能优化 - 内存优化
硬件的内存总是有限的,所有每个应用分到的内存也是有限的,所有内存的优化很有必要,否则应用就没有足够的内存使用了,这个时候就会 Crash 。内存都消耗在哪里了优化内存的话,需要了解内存在哪里消耗了了,针对内存消耗大的场景做优化,对症下药,才可以有一个好的优化效果。Android Studio 里面的 Profiler 工具是一个很好用的工具,通过里面的 memory 工具可以实时监控 APP 运行过程中的内存分配。dump APP 内存堆栈后,还可以看到各个类占用的内存情况。可以查看每个对象的
2021-04-13 18:58:01 321
原创 Android 性能优化 - 稳定性优化
APP 稳定性的维度app 稳定一般指的是 app 能正常运行, app 不能正常运行的情况分为两大类,分别是 Crash 和 ANRCrash:运行过程中发生的错误,是无法避免的。ANR:应用再运行时,由于无法再规定的时间段内响应完,系统做出的一个操作。如何治理 Crash应用发生 Crash 是由于应用在运行时,应用产生了一个未处理的异常(就是没有被 try catch 捕获的异常)。这会导致 app 无法正常运行。如果需要解决的话,就需要知道这个未处理的异常是在哪里产生的,一般是通
2021-04-13 18:57:30 427
原创 Android 性能优化 - 启动速度优化
启动的类型一般分为,冷启动和热启动冷启动:启动时,后台没有任何该应用的进程,系统需要重新创建一个进程,并结合启动参数启动该应用。热启动:启动时,系统已经有该应用的进程(比如按 home 键临时退出该应用)下启动该应用。如何获取启动时间adb 命令adb shell am start -S -W 包名/启动类的全名adb shell am start -S -W xxx/xxxActivityStopping: xxxStarting: Intent { act=android.
2021-04-13 18:56:56 201
原创 Android 性能优化 - APK 瘦身
如何查看 apk 的组成如果要优化 apk 的大小,我们首先需要知道我们编译出来的 apk 都包含哪些东西,然后针对占用大的做裁剪,或者删除不需要的东西,从而达到瘦身的目的。查看 apk 的内容占用情况很简单,打开 AS ,把 apk 拖到 AS 里面就可以查看 apk 包含的内容了。可以看到占大头的是 res 代码等,所以瘦身可以从这几个方面来考虑。如何减少 res 资源大小删除冗余的资源一般随着项目的迭代,部分图片等资源不再使用了,但是可能仍然被编译到了 apk 里面,所以可以删除这部
2021-04-13 18:55:45 316
原创 不会 Android 性能优化?你还差一个检测库!
由于本人工作需要,需要解决一些性能问题,虽然有 Profiler 、Systrace 等工具,但是无法实时监控,于是计划写一个能实时监控性能的小工具,经过学习大佬们的文章,最终完成了这个开源的性能实时检测库。初步能达到预期效果,这里做个记录,算是小结了。开源库的地址是:https://github.com/XanderWang/performance幸苦各位能给个小小的 star 鼓励下。这个性能检测库,可以检测以下问题 UI 线程 block 检测 App 的 FPS 检测 线程和
2021-01-12 15:05:28 280
原创 总结笔记(六) - 网络编程总结
文章目录网络编程总结网络协议总览网络协议分层网络协议框架各层协议之间的区别合联系HTTP 协议HTTP 协议是什么HTTP 协议是如何工作的TCP/IP 的三次握手和四次挥手三次握手四次挥手如何理解 HTTP 协议是无状态的,无连接的HTTP 各个版本比较GET 和 POST 的区别HTTPS 协议原理HTTP 和 HTTPS 的区别网络开源库框架有哪些okhttp 源码解析如何优化网络网络编程总结网络协议总览网络协议分层网络协议框架各层协议之间的区别合联系应用层: Http WebSock
2021-01-05 22:48:44 120
原创 总结笔记(五) - Java 线程总结
文章目录Java 线程总结Java 线程安全什么是线程安全VolatileJava 变量的读写volatile 如何保持内存可见性volatile 如何防止指令重排序线程安全的实现方式synchronized锁膨胀过程Lock + volatileJava 里锁的分类常用锁的原理分析线程间通信线程池Java 线程总结Java 线程安全什么是线程安全在上一节的 Java 内存模型里面说到,程序在运行的时候,线程并不是直接从主存里面,而是先从主内存拷贝一份到工作内存(线程私有的),然后执行代码,最后把计
2021-01-05 22:47:46 213
原创 总结笔记(四) - JVM 总结
文章目录JVM 总结什么是 JVMJVM 在运行程序的时候,这个程序在 JVM 里面是怎么样的?一个 class 字节码文件里,类的结构是如何的?JVM 是如何找到一个类的JVM 加载类的时候,有哪些过程呢?Java 内存模型JVM GC四种索引GC 的类型回收算法DVM 和 JVM 区别,或者说是如何优化的JVM 总结什么是 JVMJVM 是 Java 虚拟机,是一个虚拟出来的计算机,仿真模拟计算机。JVM 在运行程序的时候,这个程序在 JVM 里面是怎么样的?JVM 的内存主要分为五块程
2021-01-05 22:45:59 96
原创 总结笔记(三) - Java 反射和注解总结
文章目录反射总结什么是反射反射有什么用反射的常用方法介绍Class 常用方法介绍Method 常用方法介绍Filed 常用方法介绍常用的场景动态配置动态代理hook 框架注解总结什么是注解注解定义注解的应用场景反射总结什么是反射反射是 Java 语言的一个特性,就是在程序运行状态中,对于任何一个类,都可以通过反射知道这个类所有的方法和属性。对于任何一个实例,都可以调用这个实例的任何方法和属性。这个在运行时动态获取类或者实例的属性和方法,动态调用属性和方法的特性就叫反射。反射有什么用从特性可以看出,
2020-09-07 21:37:13 145
原创 总结笔记(二) - Java 集合总结
文章目录Java 集合总结Java 有哪些集合,继承关系是怎么样的平时常用的集合有哪些ListArrayListLinkedListSetHashSetTreeSetMapHashMapLinkedHashMapHashtableTreeMap碰到的常见问题线程安全问题ConcurrentHashMap1.7 实现原理是:1.8 实现原理是:Java 集合总结Java 有哪些集合,继承关系是怎么样的平时常用的集合有哪些CollectionList 可以重复添加元素ArrayListLi
2020-07-04 16:16:35 245
原创 总结笔记(一) - 泛型总结
文章目录泛型总结泛型是什么?Java 是如何实现泛型的?什么是泛型的类型擦除呢?泛型的通配符 `?`、`extends` 和 `super`?通配符extends 通配符super 通配符小结参考资料泛型总结泛型是什么?简单说就是类型参数化,什么意思呢?参数化的意思就是我们在定义的时候不知道具体的值,我们在到我们实际运行的时候才知道具体的值。类型参数化就是具体类型在定义的时候不知道,在实际运行的时候是确定的某一个类型。Java 是如何实现泛型的?泛型是很多高级语言都有的特性。根据定义,泛型在运行时
2020-07-01 21:56:32 188
原创 JVM 内存模型学习笔记
JVM 内存模型学习文章目录JVM 内存模型学习概述为什么需要学习 JVM 内存模型5 块内存的分类和区别程序计数区虚拟机栈局部变量表操作数栈动态链接方法出口本地方法栈方法区类的常量池运行时常量池字符串常量池堆拓展String 的一些关于内存的问题常用类型及其包装类参考资料概述为什么需要学习 JVM 内存模型为什么需要学习 JVM 内存模型呢?很简单,同样的需求,不同的人实现下来,最后的效果不一样,有的人写得程序很卡顿,有的人写的程序就很流畅。这之间有什么差距呢?程序写的好的人,一般对一些细节了解
2020-06-17 14:15:47 209
原创 如何发布自己的 lib 库到 jcenter
一 注册一个 bintray 账号注册的方法比较简单,这里就不说了。注册网址 https://bintray.com/signup/oss二 bintray 上传教程在根 build.gradle 添加以下代码buildscript { ... dependencies { classpath 'com.novoda:bintray-release:0.+' // 0.+ ...
2020-04-20 09:24:44 235
原创 替换 Android Studio 默认的 gradle仓库地址
由于一些原因,总是很难下载 google 库和 jcenter 上得库,好在阿里给我们搭了个仓库来同步这些库,所有把 google 和 jcenter 库的地址替换为阿里的就可以很快下载库了。具体的方法就是找到 gradle 的配置文件夹 一般在 ~/.gradle 或者 C:/User/xxxx/.gradle 下面,如果有 init.gradle 文件,那么就把下面的内容复制粘贴进去,如...
2020-03-23 21:38:12 1735
原创 mac 运行 win 软件的方法总结
文章目录1 利用cross over 这类的软件安装 win 软件2 mac 安装一个虚拟机软件,在这个虚拟机里面安装一个 win 系统3 mac 上装双系统,即 mac 和 win 在一个磁盘上4 外挂一个磁盘,外挂的磁盘上安装 win 系统。1 利用cross over 这类的软件安装 win 软件这个方法的优点是可以和 mac 系统同时运行,缺点就是兼容性不是很好,小众的软件可能无法运行...
2019-07-04 21:46:51 1080
原创 基础算法之八大排序算法总结
文章目录稳定性插入排序直接插入排序希尔排序交换排序冒泡快排选择排序简单选择排序堆排序归并排序基数排序稳定性如果排序后,相对位置不变,表示这个算法是稳定的。插入排序直接插入排序插入排序就是把后面的数插入前面已拍好序的部分。稳定的希尔排序当数组比较长的时候,直接插入排序效率不高,可能需要多次交换,研究发现,直接排序在数组长度比较小的时候,效率比较高。这个规律是希尔发现的,所以希尔排序就...
2019-07-03 00:06:06 214
原创 常用数据结构之二叉树的特性以及适用场景总结
二叉树二叉树是一个特殊的树型结构,有一下的特点:最多有 2 个子节点,称为左节点和右结点。左右节点的次序不能颠倒,即使只有一个节点也需要区分是左子节点或者右子节点。没有子节点的节点称为叶子节点。完全二叉树在二叉树的基础上,n 层的完全二叉树,所有的叶子节点都在第 n 层或者 n - 1 层。同时左右子节点需要连续。满二叉树在二叉树的基础上,所有的叶子节点都在最后一层。根节点的...
2019-07-02 23:57:49 2454
原创 Application.onCreate 、ContentProvider.onCreate 、 Activity.onCreate 的调用顺序研究
Application.onCreate 、ContentProvider.onCreate 、 Activity.onCreate 的调用顺序研究网上看到的一个问题,一开始没想到答案,也是很懵的,于是自己写了个 demo 。在 demo 里打印 log 顺序。先说结果吧Application.attachBaseContext();ContentProvider.onCreate();A...
2019-06-27 22:43:16 1346
原创 一个基于 SPI 的 Android 组件化框架
文章目录一个基于 SPI 的组件化框架什么是组件化,什么是插件化。什么时候我们用组件化,什么时候我们用插件化组件化的一些思考组件是如何工作的疑难点是如何解决的1 如何直接使用 Fragment 或者其他资源2 组件的初始化需要放到 Application 里面3 新增一个组件一些需要注意的事项一个基于 SPI 的组件化框架详细的源码请移步 github:spi_component首先,我们思...
2019-06-11 22:19:22 1020
原创 Android adb 命令学习记录
adb 命令学习记录文章目录adb 命令学习记录通过 wifi 连接手机强大的 dumpsys 命令打印某个应用的内存信息打印 Activity 的信息am 命令tcpip 命令打印日志GPU 呈现模式过渡绘制性能分析vmstat 命令通过 wifi 连接手机有些时候,我们手头上没有数据线,这个时候想调试一个应用就不是很方便了。其实这个时候我们可以通过 wifi 来连接手机并调试。通过 wi...
2019-05-19 23:33:20 945
原创 入坑 Gradle 插件开发(一)
文章目录仅自己的工程里面使用希望开源发布出去,供大家使用修改 build.gradle新建 src/main/groovy 目录创建 Plugin 类新建一个 properties 配置上传到 maven 库别人如何引用 gradle 插件最近由于需要做一些功能,比如统计方法的执行时间,处理删除一方法等。网上找了一圈,虽有有很多开源工具有类似的功能了,但是不够灵活,所以想自己开发 Android...
2019-05-07 18:46:40 197
原创 OKHttp java.lang.IllegalArgumentException: Unexpected char 错误解决方法
在使用 okhttp 的时候,head 的一些项是中文,导致网络请求失败,错误类似下面的 java.lang.IllegalArgumentException: Unexpected char …找了一圈发现是 okhttp 对 head 的编码做了验证 Header values are (technically) required to be ISO-8859-1 but in pra
2019-04-29 15:52:08 20725
原创 Python 基础(一)
Python 基础(一)Python 基础(一)概述Python 的基础类型。整数浮点数布尔型空值字符串变量概述在上一篇文章中,我们简单介绍了如何运行第一 Python 程序。虽然只是简单的在命令行打印了一句话,但是程序是正常运行了的,如果我们想要用 Python 做更酷炫,更好玩的程序。那我们需要先了解下 Python 开发的一些基础知识了,基...
2019-04-29 15:49:58 171
原创 Python 基础(三)
Python 基础(三)文章目录Python 基础(三)概述条件判断比较 2 个数的大小利用判断结果,控制程序执行流程循环for 循环while 循环循环控制break 循环控制continue 循环控制小结概述在上一篇,我们学习了一些“集合”的使用特性和使用方法,同时我们抛出了一个问题。我们现在有一组数据,记录的近几个月每一天的最高温度(摄氏度),现在我们需要找出近几个月的最高温度是多...
2018-09-19 16:24:10 206
原创 Android -- 快速切换配置而不用重新编译 -- ConfigX
背景代码接入修改配置项删除配置项退出应用背景平常开发中,我总是遇到需要临时修改或者调整 app 里面的一些参数,然后看看不同参数带来的 效果。比如,某个动画,稍微有些生硬,需要微调下时间。某个效果,需要对比打开或者关闭时候的最终效果来决定采用哪种方案。在一开始的时候,我是通过手动找到代码修改点,然后修改这个代码里面的值,然后重新编译、安装,然后查看效果...
2018-09-16 17:41:30 422
原创 Python 基础(二)
Python 基础(二)Python 基础(二)概述list – 列表tuple – 元组dict – 词典set – 集合概述上一篇介绍了 Python 开发基础(一) 。不知道还有没有印象。上一篇中主要介绍了几种 Python 里面的几种基础类型,实际开发过程中,我们通过组合这几种基础类型,可以变化出成千上万种类型,有了这些丰富的类型,我们就可以开发出令...
2018-09-10 23:00:51 141
原创 记一次 OutOfMemeory 问题修改
今天测试发现了一个 bug , app 大概每 2 分钟就会重启一次。看了下 log 。分析了下原因。先说下我们这边的需求:我们有个需求,就是在 api 请求失败的时候,需要把请求失败的原因上报给服务器。上报请求失败的原因也是一个 api ,它的错误也会上报。在此 2 条需求基础上,仔细想一想,其实有很大的问题,主要漏洞是会造成一个循环的调用。这个循环调用的逻辑如下:某个 ...
2018-08-30 23:10:48 419
原创 抽奖助手自动参与抽奖
无码科技开发了一个抽奖的小程序,里面有一些赞助商提供的抽奖,但是每次都要一个一个的点才能参与,很麻烦。参考了网上的一些教程,写了一个脚本,可以不用一个一个地点就可以参与抽奖。过程的话主要是抓包,分析如何获取奖品列表,分析如何提交参与抽奖。模拟小程序发送的请求,参与抽奖。抓包的话,这个就不详细讲,最近也是在摸索,等有空了出个图文教程。这里先说个结论吧。获取每日抽奖的奖品...
2018-08-30 14:05:09 5463
原创 requests 去掉 headers 里的 content-length
说一下碰到的问题吧。目前在做一个 demo 的时候,用的 post 请求,然后在请求里面设置了 headers ,这个 headers 里面是有一个 content-length 属性的,但是服务器不接受这个参数,于是需要删除了,找了下资料,最后找到了方法,特记录下来。from requests import Request, Sessionsession = Session()re...
2018-08-29 23:30:39 8352 3
原创 Typora 修改主题,让代码不换行
最近简单看了下 Typora 的主题,然后想修改下主题,让代码不换行,研究了下,记录下。下面的一段代码就是最后的修改效果,需要指出的是,我使用的是 VUE 这个主题#write .CodeMirror-wrap .CodeMirror-code pre { padding-left: 12px; white-space: nowrap;}#write .CodeMi...
2018-08-15 19:37:18 4394 2
原创 Activity 启动流程分析
Activity 启动流程分析Activity 启动流程分析1.1 Activity#startActivity(Intent intent)1.2 Activity#startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options)2.1 Instrumentation#execStar...
2018-08-08 00:15:06 393
原创 tomcat 8.x 安装证书和二级域名的记录
最近在做一个 web 相关的东西,记录下碰到的问题吧安装 ssl 签名域名是从阿里云上面买的,上面可以免费申请证书,于是跑上去申请了免费的证书,由于服务器用的是 tomcat ,于是按照阿里云的文档开始安装证书,但是在安装的过程中发现不生效。查了下原因,发现有2个原因 * 一个是我的 tomcat 是 8.x 版本,阿里云提供的文档的 tomcat 毛线版本比较老,后来网上找了一...
2018-07-14 19:58:54 514
转载 MAT 使用教程
MAT 使用教程Memory Analysis Tools (MAT) 是一个分析 Java 堆数据的专业工具,用它可以定位内存泄漏的原因。观察 Heap运行程序,然后进入 DDMS管理界面,如下:点击工具栏上的 来更新统计信息点击右侧的 Cause GC 按钮或工具栏上的 即可查看当前的堆情况,如下:主要关注两项数据:Heap Size 堆的大小,当资...
2018-07-02 10:01:55 2116
原创 Pyton Fatal error in launcher:Unable to create process using ... 错误
最近同时安装 python2 和 python3 的时候, pip 出现了一些问题,在使用 pip 命令的时候,提示下面的错误 Fatal error in launcher:Unable to create process using …这种错误就是和普通库的安装错误一样,根据提示,利用python命令再次升级pip就OK。命令如下: python -m pip in...
2018-05-02 10:22:17 207
原创 Android 性能优化总结
android 性能优化方法性能优化的方向性能优化是移动端开发绕不过的一个问题,毕竟硬件资源有限,而且业务也越来越复杂,不优化的话体验很差,严重的话整个程序都可能无法运行。网上已经有了很多关于性能优化的优秀文章,这里我也来小结下,算是对自己以前做的事情的总结吧。首先,性能包含哪几个方便?然后,针对每一个方面,我们应该从什么入手来优化,如何去量化性能优化?我们要先想清楚这几个...
2018-04-19 01:10:38 445
原创 Handler Looper MessageQueue Thread HandlerThread IntentService 的简单解析
Handler Looper MessageQueue Thread HandlerThread IntentService 的简单解析这几个类应该是Android 很基础也很重要的几个类了。可以用这几个类做很多有意思的东西, 比如Handler 类解析Handler 一般作为消息的接收者的角色,接收某个线程发出的 Message 并处理。那 Handler 是如何接收以及如何处...
2018-04-17 14:48:24 239
原创 MiniTasker 一个方便切换线程去执行耗时任务,并且可以在需要回调到 UI 线程的时候能简便切换到 UI 线程的开源库
MiniTasker@(自学笔记)MiniTasker 是一个方便切换线程去执行耗时任务,并且可以在需要回调到 UI 线程的时候能简便切换到 UI 线程的开源库。在实际的开发中,由于项目里面并没有用到 RxJava ,所以做一些耗时的事情,切换线程还是比较麻烦的,要写不少代码。在没有 RxJava 的情况下,切换进程执行耗时任务,一般通过 AsyncTask 来完成,但是编写 AsyncT...
2018-04-13 00:33:00 305
最新手机号段归属地数据库43w条数据_2019年.csv
2019-11-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人