From 6fea9d27e8c7d4e17151396b77a749a80a2ed879 Mon Sep 17 00:00:00 2001 From: Omooo <869759698@qq.com> Date: Tue, 4 Aug 2020 18:05:48 +0800 Subject: [PATCH] =?UTF-8?q?Update=20=E6=80=A7=E8=83=BD=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=8F=A3=E6=B0=B4=E8=AF=9D.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- blogs/Android/口水话/性能优化口水话.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/blogs/Android/口水话/性能优化口水话.md b/blogs/Android/口水话/性能优化口水话.md index 23e0141..59ff6e0 100644 --- a/blogs/Android/口水话/性能优化口水话.md +++ b/blogs/Android/口水话/性能优化口水话.md @@ -6,6 +6,7 @@ 1. 包体积优化 2. 布局优化 +3. 内存优化 #### 包体积优化 @@ -35,7 +36,13 @@ Apk 包主要分为几个部分,libs so 库、dex、res、assets、resources.a 最后,布局优化还不能忽略后期的维护性,比如最好不要使用 LinearLayout,布局也可以写适当的注释,可以写适当的 tools 属性利于预览,当布局代码很多时,可以使用 editor-fold 来折叠代码块。 +#### 内存优化 +内存优化分为内存泄露和内存抖动。 + +内存泄露我主要的排查思路是使用 LeakCanary + Android Profiler。LeakCanary 平时是一直开着的,在任务的收尾阶段我会跑一下 Android Profiler。打开关闭页面来来回回五六次,看一下 Total Memory 有没有明显升高,然后看一下对应的实例对象有没有被销毁。 + +在做积分商城时,有一个编辑地址页面,里面有三个 EditText 并设置了 TextChangedListener,在跑 Profiler 时发现页面已经退出了但是还存在三个该 Activity 的应用,并且都定位到了 TextWatcher 那一行,然后我试了强制 gc 在退回桌面还是存在,说明是内存泄露了。但是大家一直都这么写,并没有在 onDestory 时去移除 Listener 呀。我的测试机是三星 7,然后我试了一下我的小米 9,发现就没问题了。初步怀疑是系统 bug,然后我用 Google 的模拟器,实际测试一下 Android 8 以上没有问题,以下就存在内存泄露。但是项目中很多这样的,解决办法就是可以在 BaseActivity 的 onDestory 去遍历 View 树清空 Listener。