一个 Android APP 占用多少内存以内算性能良好

2015-05-06 08:58:04 +08:00
 Prothunder

如果图片很多,50M算不算合理?还是说有其他的评判维度呢?

19008 次点击
所在节点    Android
18 条回复
xpfd
2015-05-06 09:12:46 +08:00
对于java程序来讲,内存从来就是the more the better
Prothunder
2015-05-06 09:15:39 +08:00
@xpfd 总内存当然是the more the better,但是单个程序的内存应该是the less the better
zhaoxiting1997
2015-05-06 09:17:47 +08:00
非浏览器,游戏的话,50M可以接受,超过100M无法接受(运行时),后台时最多50M,太多就找精简版的或禁止后台了
c742435
2015-05-06 09:32:19 +08:00
前台 占用几百兆都无所谓,只要不出现崩溃;
后台占用,哼哼,20m就浪费
kyze8439690
2015-05-06 09:39:14 +08:00
是屏幕像素而分,像我用nexus5一般在五六十m浮动,而且重复打开关闭activity不会泄露。
CtrlSpace
2015-05-06 09:40:38 +08:00
超过100MB 开始,性能较差的机子就会开始卡顿了
Prothunder
2015-05-06 09:43:05 +08:00
@CtrlSpace 100M,允许的空间还是挺大的
holmesabc
2015-05-06 09:43:43 +08:00
微信一个进程120M
mthli
2015-05-06 09:48:33 +08:00
内存变化平缓比较好,如果出现大范围GC的话体验肯定不好。
morethansean
2015-05-06 09:57:30 +08:00
同4L,前台你爱咋地咋地,只要不崩溃别卡出翔……
后台进程上了10mb 都看不惯……特别在一群有些时候根本就显示0MB 的用 GCM的程序堆里出现一个在后台一直站着几十 MB 的 APP 时,就真的很烦躁……
pomelom
2015-05-06 17:07:55 +08:00
@zhaoxiting1997 微信QQ100以上妥妥的..
allan1st
2015-05-06 18:56:05 +08:00
感觉你们都走到了误区里去了,Android App 质量不是以占多少内存 来衡量的,内存是系统分配的,给你多少你就有多少;好的 app 是在系统给你 30m 内存和 130m 内存的时候都能很好的平衡性能,而且能在 app 切到 background,并且系统有需要的时候释放这部分内存。
allan1st
2015-05-06 19:17:55 +08:00
另外科普一下 Android 内存和 GC Bitmap 等知识,浅见,如果有错误请指出:
比方说你的 Android App 需要显示一张图,计算简单就算它 1024*1024 像素,这张图的 Bitmap 在内存里面占用 2M (RGB565)和 4M (RGB8888),只要这张图片还在屏幕上显示,那么它必须存在内存里;反之不然:bitmap 会继续保持在内存里,这样你下次要显示这张图片就会一下子读取出来,因为内存是非常快的。如果 App 需要更多的内存怎么办,Android 的 Delvik/ART 会做一次 GC,回收那些已经移出屏幕外边的 bitmap,因此你就有更多内存可以读取新图片了。
那么什么时候会崩溃和卡呢?
1. 卡:
图片太大或者太密集,导致频繁的 GC:Android 的 GC 是 stop the world 的,主线程也会因此受到阻塞,如果阻塞时间大于 16ms (60分之一秒),那么就会掉帧,也就是卡。
另外和系统也有关系:
三星 Galaxy S4 内存1G。最新系统好像是 4.1。一次 GC 居然要用20ms 以上,每个 App 基本只有 50m 左右分配到的空间,那么必须卡。
Moto G 1st gen 内存1G。最新系统 Android 5,用的 ART,一次 GC 只有 2-5ms,而且每个 app 可以分到 60 - 80M 左右,看上去流畅的像飞一样。
2. 崩溃
有些垃圾程序员不知道 ListView/RecyclerView 可以回收重用,或者自己写了个很差劲的 Cache,或者很多 Activity 内存泄露,那么可用的内存就越来越少,等到真的要用内存的时候就不够了,这样就会 out-of-memory 了,也就是奔溃了。

一个优秀的 app 是不可能在你切换到后台后还在 Running 里面看到占用几十一百M 的内存的;它只会出现在 Cached Processes 里面,这是系统随时可以回收的部分。

希望能够帮助你们判断 App 到底好不好,而不是看到一个图片为主的 app 达到了100M 就认为它流氓。
zhaoxiting1997
2015-05-06 20:17:21 +08:00
@pomelom 所以我微信有coolapk上的去后台老版,QQ只用国际版
Prothunder
2015-05-07 08:44:28 +08:00
@allan1st 非常感谢,学到不少
shaobin0604
2015-05-14 14:45:31 +08:00
感谢 @allan1st ,另外指出一个问题,Galaxy S4 的 ram 是 2g
allan1st
2015-05-14 15:15:37 +08:00
@shaobin0604 不是内存说错了,是型号,s3 1g RAM版本。谢谢。
dast
2015-05-22 22:16:30 +08:00
@zhaoxiting1997 国际版,好多BUG

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/188792

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX