Gok*_*rik 0 java performance android android-memory
我决定调查我的应用程序的内存使用情况,我查看了Android Studio的内存监视器,我的内存使用量大约是68 MB.对我来说这看起来太高了.
我打开了内存分配器,并从应用程序的开头开始跟踪.我看到有一个49 MB的a分配NonMovableArray,这是一个Bitmap.
我调试了应用程序,发现它是我使用的背景.下面的行来自PhoneWindow.java文件,这是Android将背景分配给我认为的屏幕的地方.背景对象的大小为49 MB,分辨率为2625x4669.
我的应用程序没有透支,我有一个应用于整个主题的背景.
我drawable在JPG格式的文件夹中有一个背景可绘制,分辨率为750x1,334.
PhoneWindow.java
if (mBackgroundResource != 0) {
background = getContext().getDrawable(mBackgroundResource);
} else {
background = mBackgroundDrawable;
}
Run Code Online (Sandbox Code Playgroud)
我正在摩托罗拉Nexus 6设备上进行测试,该设备具有560密度,分辨率为1440 x 2560.
有两点我不明白.
如果你们可以向我解释这将是伟大的.谢谢!
如果设备的分辨率为1440x2560,为什么我的背景会转换为2625x4669?
你把图像放进去了res/drawable/.这不是一个好的选择,因为这是一个同义词res/drawable-mdpi/.因此,Android正在重新采样您的图像,认为您的目标是-mdpi设备(~160dpi),因此图像在Nexus 6(密度的3.5倍)上的物理尺寸大致相同.
是否res/drawable-nodpi/或是res/drawable-anydpi/正确的选择取决于您的替代版本的此资源,但任何一个可能会工作.
怎么一个160 KB的文件最终会变成49 MB?
磁盘上的图像占用160KB .内存占用是解码图像.这将是图像分辨率(重新采样后)乘以4个字节/像素的ARGB_8888图像.2625x4669x4~ = 49MB.
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |