Android性能优化
文章平均质量分 80
以理论和实战为基础,更好的开发出高性能应用
Lud_
积累点滴
展开
-
Android性能优化(总结优化点)
文章目录概述APP启动优化APP内存优化APP布局优化APP卡顿优化APP线程优化APP网络优化APP电量优化APP apk瘦身优化APP稳定性优化APP专项技术优化概述总结性的内容,总结了一些优化可以注意的点。APP启动优化启动优化思想APP内存优化内存检测 (查找内存泄漏和对象数量分配)Android Profile (直观,新版本可以直接查看最近一次GC Route路线,对查找内存泄漏问题很好用)Memory Analyzer(MAT):查找引用和内存泄漏比较方便Leak原创 2021-10-14 21:06:28 · 1920 阅读 · 0 评论 -
Android性能优化-启动优化思想
文章目录启动时间测量方式通过adb命令启动时间测量方式通过adb命令adb shell am start -W [PackageName]/com.[packageName].SplashActivity注意:前面部分时你的 applicationId 在 gradle中配置的 ,测试的就是debug的id,release的就是release的。后面是你对应启动activity的package+activity具体路径(必须是在AndroidManifest.xml中配置了如下配置)<in原创 2021-08-26 20:58:48 · 218 阅读 · 0 评论 -
Mac android 导出anr文件
通过adb命令进入adb shell(需要配置adb环境变量)adb shell然后会进入如下状态starqlteue:/ $ 进入anr文件夹1|starqlteue:/ $ cd data/anr查看文件夹starqlteue:/data/anr $ ls -alltotal 7428drwxrwxr-x 2 system system 4096 2021-08-19 14:23:54.181624098 +0800 .drwxrwx--x 68 syste.原创 2021-08-19 14:50:24 · 381 阅读 · 0 评论 -
Android 常见内存泄漏场景
文章目录1. 资源性对象未关闭2. 注册对象未注销3. 类的静态变量持有大数据对象4. 非静态内部类的静态实例5. Handler临时性内存泄漏6. 容器中的对象没清理造成内存泄漏7. WebView如果在内存泄漏发生后再去找原因并修复会增加开发的成本,最好是在编写代码时就能够很好地考虑到内存问题,写出更高质量的代码,这里列出一些常见的内存泄漏场景,在以后的开发过程中需要避免这类问题。1. 资...原创 2019-09-05 17:16:10 · 381 阅读 · 0 评论 -
Android 优化内存空间
文章目录对象引用减少不必要的内存开销内存复用没有内存泄漏,并不意味着内存就不需要优化了,在移动设备上,由于物理设备的存储空间有限,Android 系统对每个应用进程也都分配了有限的堆内存备的存储空间有限,Android 系统对每个应用进程也都分配了有限的堆内存,因此使用最小内存的对象或者资源可以减小内存开销,同时让 GC 能更高效地回收不再需要使用的对象,让应用堆内存保持充足的可用内存,使应用...原创 2019-09-10 19:57:05 · 232 阅读 · 0 评论 -
Android 图片内存优化
文章目录设置位图格式inSampleSizeinScaled ,inDensity 和 和 inTargetDensityinBitmap在应用中有很多图片需要显示,这种图片可以是多种格式,如 JPEG、PNG 或者 WEBP,这种图片文件并不是很大,为了使文件变小,以提高传输速度,都要经过不同的压缩算法把位图压缩成不同的格式,但要在Android中显示图片,就和图片文件的大小无关了,在Andr...原创 2019-09-11 17:18:31 · 422 阅读 · 0 评论 -
Android 三重缓存
文章目录内存缓存Bitmap内存复用在 Android 应用中不可避免地要显示很多图片,如果不做处理,不管图片是否显示过,每次启动时都需要从网络拉取,这就极大影响了图片加载速度和浪费用户流量,并且整个应用中的图片内存无法控制在一个总的范围内。因此,图片缓存在一个图片加载模块中很重要并且不可缺少。目前比较流行的图片框架,如 Glide、Fresco等,都使用了“内存-本地-网络”三级缓存策略。首...原创 2019-09-18 16:33:03 · 392 阅读 · 0 评论 -
Protocal Buffers
Google Protocol Buffer(简称 Protobuf)是 Google 公司内部的混合语言数据标准,目前正在使用的有超过 48?162 种报文格式定义和超过 12?183 个.proto 文件。它们用于 RPC 系统和持续数据存储系统。Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者序列化。它很适合做为数据存储或 RPC 数据交...原创 2019-09-19 15:09:32 · 423 阅读 · 0 评论 -
SharedPreferences 优化
SharedPreferences 是一种简单便捷的存储方式,在 Android 应用中,常用来存储一些简单配置信息,例如保存应用中的一个开关状态和一些数据的独家属性等.特点用 Map 数据结构来存储数据,以键值(Key-Value)的方式存储,可以简单地读取与写入;数据读取与写入的方法都非常简单。存储路径SharedPreferences 将数据保存到一个 XML 文件中,...原创 2019-09-19 16:39:40 · 417 阅读 · 1 评论 -
WakeLock等 窗口常亮三种方式
虽然 Android 会不断关闭各种硬件来延长手机的待机时间,比如经过一段时间未做任何操作时,屏幕会逐渐变暗直至关闭,然后 CPU 进入低功耗的睡眠状态,系统这些机制都是为了节约更多的电量资源。WakeLock然而现实并非如此,由于应用需要满足一些特定的场景,比如一款社交类应用,即使手机处于待机状态,也需要把应用唤醒检查同步新的数据信息,或者播放器停留在看歌词页面。因此即使在这种睡眠状态下,应...原创 2019-09-23 18:57:24 · 665 阅读 · 0 评论 -
Android 应用进程优先级
在 Android 系统中,应用进程停止运行有以下几个原因。用户主动退出。Crash 异常退出。系统通过杀掉进程回收内存。其中用户主动退出是合理行为,Crash 在前面分析过,这里不再重复分析。而系统通过杀掉应用进程回收内存,理论上这也是合理的形为。因为 Android 有一个淘汰机制,这个机制会根据应用的运行状态设置一个进程的优先级,然后根据系统整体内存使用状态进行调整,当内存占用达...原创 2019-09-24 10:08:29 · 1108 阅读 · 0 评论 -
Job Scheduler(通过条件满足时触发任务)
在应用开发中,有以下一些常见的耗电场景:经常为了使一些特殊模块正常工作,而通过唤醒 CPU 去执行对应程序,但 Google 测试发现,每次唤醒 CPU,即使程序只运行 1 秒钟,但实际上消耗了大约两分钟的耗电量。一些并不重要的数据,在非 Wi-Fi 环境下上报,如上传日志等。在 CPU 高负荷状态下去做一些数据清理工作。以上这些操作在应用中是有必要的,但并不紧急,可以选择在合适的环境...原创 2019-09-24 11:32:27 · 965 阅读 · 0 评论 -
Android 使用 MAT 查找内存泄漏
对于大型 Java 应用程序来说,再精细的测试也难以堵住所有的漏洞,即便在测试阶段进行了大量卓有成效的工作,很多问题还是会在生产环境下暴露出来,并且很难在测试环境中重现。在没有发现或者并不知道哪有内存泄漏的情况下,可以使用在 3.3 节提到的一系列内存分析工具去分析。通常情况下,可以使用 Heap View 粗略查看堆的使用情况,又或者使用Allocation Tracker 跟踪内存分配情况,...原创 2019-09-05 14:09:01 · 898 阅读 · 0 评论 -
Android 内存分析工具 Memory Monitor、Heap Viewer
文章目录1 Memory Monitor1.1 Memory Monitor 的使用介绍1.2 典型场景2 Heap Viewer1 Memory MonitorMemory Monitor 是一款使用非常简单的图形化工具,可以很好地监控系统或应用的内存使用情况,主要有以下几个功能:显示可用和已用内存,并且以时间为维度实时反应内存分配和回收情况。快速判断应用程序的运行缓慢是否是由于...原创 2019-09-04 15:44:42 · 902 阅读 · 0 评论 -
Android 绘制原理浅析
Android 的显示过程可以简单概括为:Android 应用程序把经过测量、布局、绘制后的surface 缓存数据,通过 SurfaceFlinger 把数据渲染到显示屏幕上,通过 Android 的刷新机制 来刷新数据。也就是说应用层负责绘制,系统层负责渲染,通过进程间通信把应用层需要 绘制的数据传递到系统层服务,系统层服务通过刷新机制把数据更新到屏幕。 通过阅读 Android 系统的源码...原创 2019-08-06 19:25:03 · 1298 阅读 · 0 评论 -
Android刷新机制
《Android应用性能优化最佳实践》作为严重影响 Android 口碑问题之一的 UI 流畅性差的问题,首先在 Android 4.1 版本中得到了有效处理。其解决方法即在 4.1 版本推出的 Project Butter。Project Butter 对 Android Display系统进行了重构,引入三个核心元素:VSYNC、Triple Buffer和 Choreographer。 ...原创 2019-08-06 19:49:31 · 514 阅读 · 0 评论 -
Android绘制优化原因
Android 应用启动慢,使用时经常卡顿,是非常影响用户体验的,应该尽量避免出现。 卡顿的场景有很多,按场景可以分成 4 类:UI 绘制、应用启动、页面跳转、事件响应,如 图 2-1 所示。在这四种场景下又有多个小分类,基本上覆盖了卡顿的各个场景。这 4 种卡顿场景的根本原因又可以分成两大类。界面绘制:主要原因是绘制的层级深、页面复杂、刷新不合理,由于这些原因导致卡顿 的场景更多出现在 ...原创 2019-08-06 19:53:35 · 155 阅读 · 0 评论 -
TraceView,Systrace UI分析实例
之前讲解了TraceView和Systrace的基本使用方式 跳转连接接下来我们通过实例来分析一下是什么原因导致了UI绘制过程中每帧的时间超过了16ms原创 2019-08-13 19:21:14 · 866 阅读 · 0 评论 -
Android性能分析工具
卡顿检测工具GPU呈现模式分析 Profile GPU Rendering它的功能特点如下:它是一个图形监测工具,能实时反应当前绘制的耗时。横轴表示时间,纵轴表示每一帧的耗时(单位为 ms)。随着时间推移,从左到右的刷新呈现。提供了一个标准的耗时,如果高于标准耗时,表示当前这一帧丢失。打开方式:以小米手机为例(android8.1):在开发者选项 --> GPU呈现模式...原创 2019-08-07 20:08:49 · 637 阅读 · 0 评论 -
Android启动耗时监测(adb shell am、代码打点)
1.应用启动流程Android 应用程序的载体是 APK 文件,其中包含了组件和资源,APK 文件可能运行在一个独立的进程中,也有可能产生多个进程,还可以多个 APK 运行在同一个进程中,可以通过不同的方式来实现。但有两点需要注意,第一,每个应用只对应一个 Application 对象,并且启动应用一定会产生一个 Application 对象;第二,应用程序可视化组件 Activity 是应用的...原创 2019-08-23 19:55:47 · 2941 阅读 · 1 评论 -
Android布局优化方法-避免过度绘制
布局优化的方式大概有如下几点:减少层级:通过合理的使用RelativeLayout 、LineaLayout 和ConstraintLayout具体效率这里不再阐述。合理使用MergeViewStub的使用使用布局复用 include避免过度绘制本文主要讲述第五条避免过度绘制,...原创 2019-08-21 20:05:50 · 617 阅读 · 0 评论 -
Android 布局优化-常用布局优化工具
1.Hierarchy Viewer2.Lint(1)Hierarchy ViewerHierarchy Viewer是Android自带的一款可视化调试工具,用来检查Layout嵌套及绘制时间。以可视化的布局角度直观获取Layout布局设计和各种属性信息。注:由于Android安全考虑Hierarchy Viewer只能连接Android开发手机或模拟器。接下来介绍如何使用Hiera...原创 2019-08-16 19:20:07 · 1078 阅读 · 0 评论 -
Android启动优化方案
文章目录1.启动优化方案概括2.UI布局优化3.启动加载逻辑优化4.合理的刷新机制1.启动优化方案概括在Android应用开发中,应用启动速度对用户体验非常重要,也是一个应用给用户的第一个性能方面的体验。应用启动优化的核心思想就是要快,在启动过程中尽量做少的事。但是应用功能越丰富,模块越多,需要初始化的地方也就越多,导致了应用启动变慢。启动主要完成了三件事:UI布局,绘制和数据准备。因...原创 2019-08-28 19:40:28 · 511 阅读 · 0 评论 -
内存优化-Android内存管理机制
文章目录1 内存管理机制2 Java对象生命周期3 内存分配1 内存管理机制Android应用都是在Android的虚拟机上运行,应用程序的内存分配与垃圾回收都是由虚拟机完成的。在Android系统中,虚拟机有两种运行模式,Dalvik和ART。下面学习Android内存管理机制,了解系统如何分类和回收内存。2 Java对象生命周期在 Android 应用程序中,大部分是 Java ...原创 2019-09-03 15:02:43 · 267 阅读 · 0 评论 -
建造者模式
文章目录1 建造者模式的定义2 建造者模式的应用3 建造者模式的使用场景4 建造者模式的注意事项1 建造者模式的定义建造者模式(Builder Pattern)也叫做生成器模式,其定义如下: Separate the construction of a complex object from its representation so that the same construction p...原创 2019-09-04 00:12:37 · 1542 阅读 · 0 评论 -
Android性能分析工具“TraceView”,“Systrace UI”
TraceViewTraceView 是 AndroidSDK 自带的工具,用来分析函数调用过程,可以对 Android 的应用 程序以及 Framework 层的代码进行性能分析。它是一个图形化的工具,最终会产生一个图 表,用于对性能分析进行说明,可以分析到应用具体每一个方法的执行时间,使用可以非常 直观简单,分析性能问题很方便。使用方法在使用 TraceVeiw 分析问题之前需要得到...原创 2019-08-12 20:20:21 · 881 阅读 · 0 评论