Android应用程序内存问题
我正在制作一个用于观看电影的应用程序,它在网格、列表和水平滚动视图中显示类别和电影的图像。 该应用程序有几个活动,每个活动中都显示图像。问题是当用户只向前更改活动时,在一点上应用程序会崩溃,OutOfMemory例外 使用Heap和MAT工具,我发现位图在每个活动中都使用了大量的堆内存。在同一款手机上,如三星Galaxy S4和阿尔卡特OneTouch Idol全高清显示,应用程序只需2-3次活动就崩溃了。这太疯狂了:) 所以,我的问题是,我如何用记忆克服这个问题? 我知道这是一个普通的安卓系统问题,但我必须做些什么来解决这个问题 每个图像都针对其位置进行了优化(在附加到图像视图之前,精确测量图像尺寸)。 干杯。做一些分析 您没有提供任何代码或日志。因此,我将告诉您我遵循的基本方法 开始你的第一项活动。继续运行adb外壳转储系统“PID”或“PackageName” 在复制活动时获取信息。 执行Android应用程序内存问题,android,memory-management,out-of-memory,Android,Memory Management,Out Of Memory,我正在制作一个用于观看电影的应用程序,它在网格、列表和水平滚动视图中显示类别和电影的图像。 该应用程序有几个活动,每个活动中都显示图像。问题是当用户只向前更改活动时,在一点上应用程序会崩溃,OutOfMemory例外 使用Heap和MAT工具,我发现位图在每个活动中都使用了大量的堆内存。在同一款手机上,如三星Galaxy S4和阿尔卡特OneTouch Idol全高清显示,应用程序只需2-3次活动就崩溃了。这太疯狂了:) 所以,我的问题是,我如何用记忆克服这个问题? 我知道这是一个普通的安卓系统
adb shell“true;do dumpsys meminfo 22188;done;”>dumpsysOfsmthn.txt
* MEMINFO in pid 22188 [com.sec.android.smthn] **
Pss Private Private Swapped Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 44 44 0 0 11132 10455 184
Dalvik Heap 19189 18804 0 0 25660 19221 6439
Dalvik Other 3891 3828 0 0
Stack 200 200 0 0
Ashmem 2 0 0 0
Other dev 8168 7844 4 0
.so mmap 1990 1032 508 0
.jar mmap 5 0 4 0
.apk mmap 315 0 124 0
.ttf mmap 21 0 4 0
.dex mmap 6553 248 5584 0
Other mmap 90 4 20 0
Unknown 5743 5740 0 0
TOTAL 46211 37744 6248 0 36792 29676 6623
Objects
Views: 39 ViewRootImpl: 1
AppContexts: 4 Activities: 1
Assets: 3 AssetManagers: 3
Local Binders: 78 Proxy Binders: 42
Death Recipients: 2
OpenSSL Sockets: 0
SQL
MEMORY_USED: 286
PAGECACHE_OVERFLOW: 53 MALLOC_SIZE: 62
DATABASES
pgsz dbsz Lookaside(b) cache Dbname
4 24 53 2/17/3 /data/data/com.sec.android.smthn/databases/sns.db
4 32 55 1/13/2 /data/data/com.sec.android.smthn/databases/picasa.db
4 36 27 10/17/3 /data/data/com.sec.android.smthn/databases/local.db
Applications Memory Usage (kB):
Uptime: 31556347 Realtime: 96096816
检查哪部分比例在不断增加
它可以是ViewRootImpl或活动上下文或任何内容
以上信息可能会给你一些线索
如前所述,使用MAT或JHAT进行heapdump分析。
Mat是一种女性工具
you should look for memory leaks caused by:
Long-lived references to an Activity, Context, View, Drawable, and other objects that may hold a reference to the container Activity or Context.
Non-static inner classes (such as a Runnable, which can hold the Activity instance).
Caches that hold objects longer than necessary.
任何对象都可能导致泄漏。通常位图很大。如果很容易出现内存不足的情况,则需要检查位图等重对象
对于垫子和泄漏的理解
还有
此外,除了上述内容,您还可以使用DDMS分配跟踪器获取更多线索>是的,没有什么比这更好的数据了
也请查看此帖子 发布有关位图的代码。很抱歉,系统太大,无法发布代码。:)基本上,我必须回收堆内存,而不是当用户只是继续使用活动时。我需要有人向我解释一下,当活动暂停并放在后台以及显示其他活动时,视图及其位图和内存通常会发生什么。