# 內存優化思路
[TOC]
## 內存優化的重點
1. Activity的內存泄露
2. Bitmap的內存抖動
3. Thread的管理
## 內存泄露優化步驟
1. 檢測是否存在Activity泄露
打開App,盡可能多的進入應用的每一個Activity,然后退出App,保留應用在后臺
執行命令:
```
adb shell dumpsys meminfo com.daigou.sg.debug -d
```
輸出格式如下:
```
Applications Memory Usage (in Kilobytes):
Uptime: 1035026617 Realtime: 1037698240
** MEMINFO in pid 31260 [com.daigou.sg.debug] **
Pss Private Private SwapPss Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 52309 52180 44 0 71680 61003 10676
Dalvik Heap 4488 4316 12 0 9015 2871 6144
Dalvik Other 2448 2448 0 0
Stack 152 152 0 0
Ashmem 90 80 0 0
Other dev 141 0 140 0
.so mmap 5082 304 2968 55
.apk mmap 1808 0 552 0
.ttf mmap 420 0 400 0
.dex mmap 17818 4 16152 0
.oat mmap 488 0 40 0
.art mmap 10238 9352 432 1
Other mmap 399 4 308 0
GL mtrack 54812 54812 0 0
Unknown 5741 5668 60 11
TOTAL 156501 129320 21108 67 80695 63874 16820
App Summary
Pss(KB)
------
Java Heap: 14100
Native Heap: 52180
Code: 20420
Stack: 152
Graphics: 54812
Private Other: 8764
System: 6073
TOTAL: 156501 TOTAL SWAP PSS: 67
Objects
Views: 172 ViewRootImpl: 1
AppContexts: 4 Activities: 2
Assets: 4 AssetManagers: 3
Local Binders: 37 Proxy Binders: 35
Parcel memory: 15 Parcel count: 59
Death Recipients: 3 OpenSSL Sockets: 4
WebViews: 0
SQL
MEMORY_USED: 485
PAGECACHE_OVERFLOW: 196 MALLOC_SIZE: 117
DATABASES
pgsz dbsz Lookaside(b) cache Dbname
4 28 87 65/45/8 /data/user/0/com.daigou.sg.debug/databases/google_analytics_v4.db
4 17436 26 47/19/2 /data/user/0/com.daigou.sg.debug/databases/chuck.db
```
這里主要管理Objects欄的Activities,理論上來說,當應用完全退出時,不應該再有Activities在內存中了,但是 現在我們發現依然存在2個,說明應用存在內存泄露
那么,如何找到泄露的這兩個Activity呢,很簡單,借助我們的
```
adb shell am dumpheap com.daigou.sg.debug /data/local/tmp/memoryheap.hprof
```
