gpt4 book ai didi

java - Android - 还有一些与内存相关的问题

转载 作者:行者123 更新时间:2023-12-01 05:32:07 25 4
gpt4 key购买 nike

我有一个应用程序,其布局中(大部分)包含图像。据我了解,Android 应该在不再需要 Activity 时释放内存。因此,当 Activity 手动进行 onPause() 时,我不会释放应用程序布局使用的 Drawables。我理解 Android 应该这样做。

然后,我使用以下代码来检查内存状态:

{
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
android.app.ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(memoryInfo);

Log.i("MEMCHECK", " memoryInfo.availMem " + memoryInfo.availMem + "\n" );
Log.i("MEMCHECK", " memoryInfo.lowMemory " + memoryInfo.lowMemory + "\n" );
Log.i("MEMCHECK", " memoryInfo.threshold " + memoryInfo.threshold + "\n" );

android.os.Debug.MemoryInfo[] memoryInfoArray = activityManager.getProcessMemoryInfo(pids);
for(android.os.Debug.MemoryInfo pidMemoryInfo: memoryInfoArray) {
Log.i("MEMCHECK", " pidMemoryInfo.getTotalPrivateDirty(): " + pidMemoryInfo.getTotalPrivateDirty() + "\n");
Log.i("MEMCHECK", " pidMemoryInfo.getTotalPss(): " + pidMemoryInfo.getTotalPss() + "\n");
Log.i("MEMCHECK", " pidMemoryInfo.getTotalSharedDirty(): " + pidMemoryInfo.getTotalSharedDirty() + "\n");
}

在每个创建的 Activity 上,内存占用都会增加(堆 - getTotalPrivateDirty() )。我不想这样做,因为我的应用程序中的每一“kb”内存都非常重要。

此外,当处理此回调时:

Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] imageData, Camera c) {

}
}

空,就这样。堆从 10MB 增长到 20MB。 100%。这是正常的吗?如何避免?

最佳答案

对于图像和回调,您需要手动释放内存,而不是依赖于垃圾收集器。您还需要注意 View 的上下文。而可能在最低级别分配上下文,例如如果 View 仅在 Activity 中使用,则为其分配 Activity 上下文,如果监听器/回调应仅在 View 中使用,则为其分配 View 上下文。

您还可以手动取消绑定(bind) xml 绘图。

关于java - Android - 还有一些与内存相关的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8816953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com