![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android性能优化
Android性能调优相关
RikkaTheWorld
一个OTAKU
展开
-
Android 网络性能优化(4)弱网优化
1. 背景移动端时段,手机网络的连接形态是无线的,即通过Wifi连接,在前面章节有提高过,无线连接的优点就是便捷,只要有信号就能上网。而它的缺点是不稳定,它没有像导线那样的抗干扰手段,而且离信号越远网络越差。手机用户几乎都能体验到网络不好的情况的。而对于移动端开发来说,在网络不好的情况下进行交互,如果处理不好,会消耗宽带、浪费电量等资源问题,所以我们有必要解决弱网环境下会出现的问题。弱网优化需要解决的核心问题有两点:移动网络环境如此复杂,我们如何确定当下就是弱网环境?如果是弱网环境,我们应该如何提转载 2020-10-15 17:35:46 · 9015 阅读 · 0 评论 -
Android 网络性能优化(3)复用连接池
1. 概述复用连接池是一个优化连接的技术,在Android中,功能强大的OkHttp已经帮我们实现了这个技术,使我们不用再担心多请求时的性能低下。虽然已经帮咱实现了,但是我们可以学习学习(所以该篇比较简单),顺便可以重温下OkHttp的源码。该篇承接 Android 网络性能优化(2)DNS优化,在拿到服务器ip后,我们客户端和服务端需要建立Socket,走Tcp的三次握手,在请求完成后通过四次分手关闭Socket。下图为三次握手流程:如果程序产生了频繁的、数量较多的 网络请求,大量的连接每次都要握原创 2020-10-08 15:45:29 · 1684 阅读 · 0 评论 -
Android 网络性能优化(2)DNS优化
目录1. 概述2. DNS2.1 DNS是什么2.2 DNS服务器结构2.2.1 根域名服务器2.2.2 顶级域名服务器2.2.3 权威域名服务器2.2.4 本地DNS服务器2.3 DNS寻址过程2.4 DNS坑点3. ip直连3.1 原理4. HttpDNS5. 参考文章1. 概述在Android 网络性能优化(1)概述中,我整理了部分网络会遭遇瓶颈的地方,并且提出了可以优化的做法或者思路。而网络交互最初是的动作就是连接,所以我认为优化的方向先要从网络连接这个点切入。而连接的最初的动作是DNS解释原创 2020-09-30 14:57:17 · 2235 阅读 · 0 评论 -
Android 网络性能优化(1)概述
对于Android来说,开发者可以轻松的打造一套 MVP + Retrofit + RxJava 的框架来处理所有的网络请求。因为 Retrofit下层封装的`OkHttp`是非常强大的网络库,而 `RxJava`又能够很好的帮我们处理线程切换的问题。但是对于大型的App来说,仅仅是使用这些是不够的,它太机械,不能帮我们处理复杂多变的网络情况。原创 2020-09-17 16:28:01 · 1452 阅读 · 1 评论 -
Android高性能日志写入方案-mmap
本文转自 2019-08-18-Android高性能日志写入方案-mmap,用于学习Android 日志写入优化。1. 常规方案的缺陷性能问题:一开始日志的写入就是通过标准I/O直接写文件,当有一条日志要写入的时候,首先,打开文件,然后写入日志,最后关闭文件。但是写文件是 IO 操作,随着日志量的增加,更多的IO操作,一定会造成性能瓶颈。为什么这么说呢?因为数据从程序写入到磁盘的过程中,其实牵涉到两次数据拷贝:一次是用户空间内存拷贝到内核空间的缓存,一次是回写时内核空间的缓存到硬盘的拷贝。当发生回写时转载 2020-06-05 17:31:31 · 2427 阅读 · 0 评论 -
记录一个Dialog$mContext引起的内存泄漏
因为前几天看到了一个关于fwk层的内存泄漏。想到了之前一直出现的Dialog内存泄漏:上面的意思是指我在界面销毁的时候,Dialog.mContext因为还持有着外部的引用,所以导致释放不了界面。我们都知道,一个Dialog的销毁是在其dismiss的时候, 所以我就去看了下 Dialog的dismiss方法:// Dialog.java @Override public void dismiss() { if (Looper.myLooper() == mHand原创 2020-05-09 17:18:45 · 1250 阅读 · 1 评论 -
关于ViewGroup$ViewLocationHolder$mRoot的内存泄漏
今儿遇到个场景:在Android P(API 28)中,在退出了含有RecyclerView的RelativeLayout中,LeakCanary报了这么一个内存泄漏:1. 定位问题1.1 定位源码在AndroidP中ViewGroup内部有这么一个静态内部类ViewLocationHolder:// ViewGroup.java /** * Pooled class ...原创 2020-05-07 15:37:20 · 1981 阅读 · 1 评论 -
Android 内存性能优化
之前学习的JVM、DVM、ART就是为了这一章做铺垫的。这篇先从避免内存泄露开始学习,然后学习常用的内存分析工具 Memory Monitor、Allocation Tracker和Heap Dump。最后分析内存泄漏的利器MAT和LeakCanary。1. 避免可控的内存泄漏内存泄漏是内存优化的重点,如果一旦出现,就会让应用变得非常棘手。所以我们要解决关于内存泄漏的东西。1.1 什么是...原创 2020-02-13 15:51:48 · 518 阅读 · 0 评论 -
Android 绘制性能优化
在学习了 JVM、DVM、ART后,我们对Android关于运行时的一些机制(内存分配、垃圾回收、AOT、JIT)有所了解。接下来就可以正式的性能调优了。第一个学习的就是绘制优化,因为绘制和界面流畅度有关,这个优化的效果是最直观的。1.绘制性能分析要学会性能的分析,首先要知道绘制的原理,接着就是介绍性能绘制的工具:Profile GPU Rendering、 Systrace和 Trace...原创 2020-02-10 11:50:38 · 1132 阅读 · 0 评论 -
Android性能调优之需要掌握Dalvik和ART的知识
学习了JVM之后,就学习一下运行在移动设备上的虚拟机Dalvik和ART。学完DVM和ART就可以冲绘制优化了。Dalvik和ART也是非常大的体系。对于Android应用开发来说,只需要掌握它们的基本原理并且会看它们的log就行了。本篇也只介绍基础,如果想深入了解,就得去看专业的书籍。在Android4.4时ART诞生,DVM和ART在4.4的版本中可以互替,在Android5.0后And...原创 2020-02-03 15:16:39 · 493 阅读 · 0 评论 -
Android性能调优之需要掌握的JVM知识
今天开始学习性能调优,跟着网上大神的blog整理。性能调优有分很多种:绘制优化内存优化电量优化启动优化存储优化流量优化图片优化Apk包体优化…既然要深入到这些优化去,仅仅是掌握一些工具 TraceView、Lint、LeakCanary是不够的,我们要去学习更多的知识、框架,从系统源码、虚拟机即低层的角度去看待这些优化。所以在去学工具框架之前,我们有必要从头梳理一遍An...原创 2020-01-20 14:03:05 · 1489 阅读 · 2 评论 -
Android 关于多界面绑定Service的小优化
场景:多个界面都要使用一个Service,那就会有至少一个界面会去启动Service,多个界面去绑定Service的行为。优化:把Service放到一个 工具(Util/Manager)类去管理。只有启动的界面会去 启动这个service。别的Activity/Fragment…不用再绑定Service了,而是直接去这个工具类 里面 操作serivce。目前来看是个较为有效率的做法...原创 2019-09-29 15:07:29 · 610 阅读 · 0 评论 -
Android 关于onDestory和finish释放资源
onDestory是一个Activity生命周期的最后一步,是几乎所有资源释放完了,才会执行。而finish,是Activity执行后一定会立刻生效的。Activity可能不会走onDestory,但是一定会走 finish。如果我们把所有释放资源的操作放在onDestory的话,有可能会导致进入下个Acitvity的时候,上一个Activity里的代码还在跑。举一个例子:我们在A页面...原创 2019-10-31 14:21:36 · 3365 阅读 · 0 评论