V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Prothunder
V2EX  ›  Android

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

  •  
  •   Prothunder · 2015-05-06 08:58:04 +08:00 · 19046 次点击
    这是一个创建于 3493 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    18 条回复    2015-05-22 22:16:30 +08:00
    xpfd
        1
    xpfd  
       2015-05-06 09:12:46 +08:00   ❤️ 1
    对于java程序来讲,内存从来就是the more the better
    Prothunder
        2
    Prothunder  
    OP
       2015-05-06 09:15:39 +08:00
    @xpfd 总内存当然是the more the better,但是单个程序的内存应该是the less the better
    zhaoxiting1997
        3
    zhaoxiting1997  
       2015-05-06 09:17:47 +08:00 via Android   ❤️ 1
    非浏览器,游戏的话,50M可以接受,超过100M无法接受(运行时),后台时最多50M,太多就找精简版的或禁止后台了
    c742435
        4
    c742435  
       2015-05-06 09:32:19 +08:00   ❤️ 3
    前台 占用几百兆都无所谓,只要不出现崩溃;
    后台占用,哼哼,20m就浪费
    kyze8439690
        5
    kyze8439690  
       2015-05-06 09:39:14 +08:00   ❤️ 1
    是屏幕像素而分,像我用nexus5一般在五六十m浮动,而且重复打开关闭activity不会泄露。
    CtrlSpace
        6
    CtrlSpace  
       2015-05-06 09:40:38 +08:00   ❤️ 1
    超过100MB 开始,性能较差的机子就会开始卡顿了
    Prothunder
        7
    Prothunder  
    OP
       2015-05-06 09:43:05 +08:00
    @CtrlSpace 100M,允许的空间还是挺大的
    holmesabc
        8
    holmesabc  
       2015-05-06 09:43:43 +08:00   ❤️ 1
    微信一个进程120M
    mthli
        9
    mthli  
       2015-05-06 09:48:33 +08:00   ❤️ 1
    内存变化平缓比较好,如果出现大范围GC的话体验肯定不好。
    morethansean
        10
    morethansean  
       2015-05-06 09:57:30 +08:00   ❤️ 1
    同4L,前台你爱咋地咋地,只要不崩溃别卡出翔……
    后台进程上了10mb 都看不惯……特别在一群有些时候根本就显示0MB 的用 GCM的程序堆里出现一个在后台一直站着几十 MB 的 APP 时,就真的很烦躁……
    pomelom
        11
    pomelom  
       2015-05-06 17:07:55 +08:00
    @zhaoxiting1997 微信QQ100以上妥妥的..
    allan1st
        12
    allan1st  
       2015-05-06 18:56:05 +08:00   ❤️ 1
    感觉你们都走到了误区里去了,Android App 质量不是以占多少内存 来衡量的,内存是系统分配的,给你多少你就有多少;好的 app 是在系统给你 30m 内存和 130m 内存的时候都能很好的平衡性能,而且能在 app 切到 background,并且系统有需要的时候释放这部分内存。
    allan1st
        13
    allan1st  
       2015-05-06 19:17:55 +08:00   ❤️ 2
    另外科普一下 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
        14
    zhaoxiting1997  
       2015-05-06 20:17:21 +08:00 via Android
    @pomelom 所以我微信有coolapk上的去后台老版,QQ只用国际版
    Prothunder
        15
    Prothunder  
    OP
       2015-05-07 08:44:28 +08:00
    @allan1st 非常感谢,学到不少
    shaobin0604
        16
    shaobin0604  
       2015-05-14 14:45:31 +08:00
    感谢 @allan1st ,另外指出一个问题,Galaxy S4 的 ram 是 2g
    allan1st
        17
    allan1st  
       2015-05-14 15:15:37 +08:00 via Android
    @shaobin0604 不是内存说错了,是型号,s3 1g RAM版本。谢谢。
    dast
        18
    dast  
       2015-05-22 22:16:30 +08:00
    @zhaoxiting1997 国际版,好多BUG
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3252 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 12:35 · PVG 20:35 · LAX 04:35 · JFK 07:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.