Android之内存优化实战基础
[TOC]
文章参考:
概述内存问题分析查看App的内存限制
1adb shell cat /system/build.prop
输出结果可能如下:
内存管理adj管理算法
通过打分机制,通过APP的状态,进行打分。如果分数越高,则应用则越有可能被kill掉。APP使用的内存越大或者越多,则APP越有可能被Kill掉。
五个等级:
前台进程
可见进程
服务进程
空进程
这里也就涉及到进程保活的相关逻辑,这里不再赘述。
内存优化方案1.Android内存管理机制
Android应用都是在Android虚拟机上运行的,内存分配和垃圾回收都是由Android虚拟机来完成的。
2.常见的内存泄漏
其实内存泄漏的本质就是较长生命周期的对象引用了较短生命周期的对象。
2.1 内存泄露
内存泄漏原因:堆上分配的对象已经不会再使用,但是GC收集器无法对其进行回收,此对象被强应用所引用 。
静态变量导致的内存泄漏
解决办法:将内部类设为静态内部类或独立出来;使用context.getApplicationContext()。
单例模式导致的内存泄漏
解决办法:传参context.getAppl ...
Andoid之内存泄露排查指南
[TOC]
概述 首先来说下什么是内存泄漏 内存泄漏(Memory Leak):指的是程序已经动态分配的堆内存由于某种原因程序未释放或者无法释放,造成系统资源浪费,会造成程序运行缓慢甚至系统崩溃等严重后果。
Handler内存泄露如果你使用handler进行操作时,你会发现出现以下提示 This Handler class should be static or leaks might occur (anonymous android.os.Handler)这样的提示。翻译: 由于此Handler被声明为内部类,因此可能会阻止外部类被垃圾回收。
如果Handler使用Looper或MessageQueue作为主线程以外的线程,则没有问题。
如果Handler正在使用主线程的Looper或MessageQueue,则需要修复Handler声明,如下所示:将Handler声明为静态类; 在外部类中,实例化外部类的WeakReference,并在实例化Handler时将此对象传递给Handler; 使用WeakReference对象对外部类的成员进行所有引用。
CPU占用指标查看学习
文章参考:http://gityuan.com/2017/08/12/proc_stat/
概述CPU占用时间相关指标介绍:
cpu指标
含义
user
用户态时间
nice
用户态时间(低优先级,nice>0)
system
内核态时间
idle
空闲时间
iowait
I/O等待时间
irq
硬中断
softirq
软中断
iowait时间是不可靠值,理由如下:
CPU不会等待I/O执行完成,而iowait是等待I/O完成的时间。 当CPU进入idle状态,很可能会调度另一个task执行,所以iowait计算时间偏小;
多核CPU,iowait的计算并非某一个核,因此计算每一个cpu的iowait非常困难;
查看CPUproc/statproc/stat节点记录的是系统进程整体的统计信息:
123456789101112131415161718# CPU指标:user,nice, system, idle, iowait, irq, softirqcpu 175233 89273 ...
Android之卡顿优化实战基础
[TOC]
概述卡顿优化方案
不要在主线程进行网络访问/大文件的IO操作
绘制UI时,尽量减少绘制UI层次;减少不必要的view嵌套,可以用Hierarchy Viewer工具来检测,后面会详细讲;
当我们的布局是用的FrameLayout的时候,我们可以把它改成merge,可以避免自己的帧布局和系统的ContentFrameLayout帧布局重叠造成重复计算(measure和layout)
提高显示速度,使用ViewStub:当加载的时候才会占用。不加载的时候就是隐藏的,仅仅占用位置。
在view层级相同的情况下,尽量使用 LinerLayout而不是RelativeLayout;因为RelativeLayout在测量的时候会测量二次,而LinerLayout测量一次,可以看下它们的源码;
删除控件中无用的属性;
布局复用.比如listView 布局复用
尽量避免过度绘制(overdraw),比如:背景经常容易造成过度绘制。由于我们布局设置了背景,同时用到的MaterialDesign的主题会默认给一个背景。这时应该把主题添加的背景去掉;还有移除
XML 中非必须的背景
自 ...
Android之ANR的原理解析
[TOC]
文章参考:http://gityuan.com/2016/07/02/android-anr/
文章参考:https://mp.weixin.qq.com/s/vXNrg_wYM7sgPztInWTBHw
概述首先,ANR(Application Not responding)是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR。ANR由消息处理机制保证,Android在系统层实现了一套精密的机制来发现ANR,核心原理是消息调度和超时处理。
其次,ANR机制主体实现在系统层。所有与ANR相关的消息,都会经过系统进程(system_server)调度,然后派发到应用进程完成对消息的实际处理,同时,系统进程设计了不同的超时限制来跟踪消息的处理。 一旦应用程序处理消息不当,超时限制就起作用了,它收集一些系统状态,譬如CPU/IO使用情况、进程函数调用栈,并且报告用户有进程无响应了(ANR对话框)。
然后,ANR问题本质是一个性能问题。ANR机制实际上对应用程序主线程的限制,要求主 ...
Android之网络性能优化基础
[TOC]
文章参考:https://mp.weixin.qq.com/s/yU7ZUbZCUXGdpctic8qexw
概述优化分析流量消耗整体均值掩盖单点问题。需要一段时间流程的精准度量、网络类型、前后台
完成链路全部监控(Request\Response)的整体监控
网络请求质量优化用户体验:请求速度、请求成功率
监控相关:网络请求时长、业务成功率、请求失败率、Top失败接口
其他维度公司成本:带宽、
网络优化误区粗粒度监控不能帮助我们发现
网络优化工具Network Profiler显示实时的网络活动:发送、接收数据以及连接数
需要启用高级分析
只支持HttpURLConnection和OKHttp的网络请求库
抓包工具Stetho常见优化方案常见的网络优化方案如下:
尽量减少网络请求,能够合并的就尽量合并
避免DNS解析,根据域名查询可能会耗费上百毫秒的时间,也可能存在DNS劫持的风险。可以根据业务需求采用增加动态更新IP的方式,或者在IP方式访问失败时切换到域名访问方式。
大量数据的加载采用分页的方式
网络数据传输采用GZIP压缩
加入网络数据的缓存,避免频繁请求网络
上 ...
Android之弱网优化实践
[TOC]
文章参考:https://www.jianshu.com/p/3f31f9e8f5ea
文章参考:https://github.com/skyline75489/what-happens-when-zh_CN
概述当一个APP迭代完善到一定程度,就不得不考虑用户体验及性能优化。今天我们主要讨论弱网络环境下APP如何优化以达到更好的用户体验。
何为弱网络环境弱网状态下如何优化下面就是我们的重头戏,如何做弱网优化。我主要从移动前端以下几个方面说起:
接口设计优化在于后端设计接口是可以从以下几方面优化:1.慢查询监控 2.多查询优化3.常用接口cache:对于常用的接口进行缓存处理。4.多接口合并:所谓的多接口合并也就是某个页面内请求过多,也可以考虑做一定的请求合并。
数据压缩再处理1.对数据进行 Gzip 压缩。2.精简数据格式,如 JSON 代替 XML,WebP 代替其他图片格式。3.针对不同设备不同网络返回不同数据格式。如不同分辨率图片大小(可配合七牛):2/3G使用低清晰度图片——>下发300X240,精度为80的图片4G普通清晰度图片——>下发6 ...
Android网络性能优化之序列化方案优化
[TOC]
文章参考:https://zhuanlan.zhihu.com/p/505338692
概述没有一种序列化方案能像JSON和XML一样流行,自由、方便,拥有强大的表达力和跨平台能力。是通用数据传输格式的默认首选。不过随着数据量的增加和性能要求的提升,这种自由与通用带来的性能问题也不容忽视。
JSON和XML使用字符串表示所有的数据,对于非字符数据来说,字面量表达会占用很多额外的存储空间,并且会严重受到数值大小和精度的影响。 一个32位浮点数 1234.5678 在内存中占用 4 bytes 空间,如果存储为 utf8 ,则需要占用 9 bytes空间,在JS这样使用utf16表达字符串的环境中,需要占用 18 bytes空间。 使用正则表达式进行数据解析,在面对非字符数据时显得十分低效,不仅要耗费大量的运算解析数据结构,还要将字面量转换成对应的数据类型。
在面对海量数据时,这种格式本身就能够成为整个系统的IO与计算瓶颈,甚至直接overflow。
众多的序列化方案中,按照存储方案,可分为字符串存储和二进制存储,字符串存储是可读的,但是由于以上问题,这里只考虑二进制存储。二进 ...
RxJava2学习之基本订阅过程
[TOC]
文章参考:https://juejin.cn/post/6844903518042603528
概述
Android之性能优化性能监控框架
[TOC]
文章参考:https://juejin.cn/post/6844903518042603528
概述