為什麼同一 APP ,在不同的 Android 手機上佔用內存相差很大?

同一app,在不同的android手機上,佔用內存相差很大

例如我開發的一款app,在小米手機上運行起來,佔用內存近200M,因此耗電也很快,然而在華為手機上佔用內存就不超過100M

其實運行起來就那麼些東西,為什麼內存差的那麼大


@七月的天邀。

準確的說,同一款APP,在不同屏幕密度的android手機上,佔用內存會有差別。

導致內存差異的主要原因是圖片,因為圖片是應用運行過程中占內存的大頭,但應用中圖片的內存佔用和以下因素有關:

  • 設備的解析度;

  • 設備的屏幕密度;

  • 程序中圖片的質量;
  • 程序中圖片存放的位置;

關於這個問題的詳細解釋,可以詳細拜讀下郭霖大神和凱子哥的文章:

  • 關於Android中圖片大小、內存佔用與drawable文件夾關係的研究與分析

  • Android drawable微技巧,你所不知道的drawable的那些細節


補充一下 @張明雲的答案。

不止是圖片,在不同機型上,各個APP的緩存策略也不同。

不說具體的APP了,就拿第三方圖片庫Fresco來說,由於Lollipop之後Fresco不再佔用ASM緩存圖片,改成依賴Java Heap之後,OOM頻發,所以github上有一些自定義的cache supplier,源碼里經常會看到這樣一段:

這是比較典型的根據系統內存去決定cache pool大小的部分,如果你反編譯過很多app,你會發現這種策略非常常見。設計的好的高hit rate的cache能夠顯著提升性能,基本上是空間換時間了。所以說每個app在不同型號上的內存佔用不同,可能是第三方庫的緩存策略,可能是自己的緩存策略,可能是設備解析度……可能性非常的多。然而我個人覺得,題主你的問題很可能是圖片沒有resize導致的……


手機強答。

首先需要問清楚,題主所說的佔用內存大小是如何統計的?

如果是使用了procrank的pss,那麼這麼大的差異我很懷疑是否一個手機開啟了swap,而另一個沒有開導致的或者swap的大小不一樣?期待題主更新下adb shell procrank,以及adb shell dumpsys meminfo [pid]的對比結果。


樓上都說得對,我從另一個角度說下可能的原因:

app是從Zygote分裂出來的,由於很多廠商都會定製一大堆feature,工程師們為了加快app啟動速度,會在Zygote裡面預載入一堆常用的資源,這樣啟動app的時候就不用再載入了,但相對來說就會多佔用一些內存....


解析度不同的手機如果app做了適配那麼圖片將是不同的,某些app可能個別功能模塊5.0以上和以下實現效果也不同,所以可能佔用內存差別很大


開啟的一些服務,死循環的服務很占內存的又耗電,這就需要代碼優化。安卓安源好處有優勢也是有弊端的


因為 APP 需要進行手機適配

1 圖片適配 大屏幕手機 圖片自然要做大

2 緩存 手機配置等達不到要求 自然不會給你開全特效- -


推薦閱讀:

如何評價樂視新機樂pro3?
有綜合實力超過了 iPhone 的 Android 手機嗎?
華為P10和小米6對比怎樣?
對於即將發布的一加手機5(OnePlus 5),你有怎樣的期待?
安卓手機到底應不應該關注內存佔用問題?

TAG:Android應用 | Android開發 | Android手機 | Android | 移動開發 |