android 防空间评论,android – 确定Activity的可用堆空间(防止OutOfMemoryException)

博主正在寻找方法估算Android应用在加载和解析大文件时的内存使用,以避免OutOfMemoryException。他们尝试使用ActivityManager和Debug.MemoryInfo获取内存信息,但不确定如何准确估算Activity的堆使用情况。博主寻求关于如何总计MemoryInfo对象中的值以及在不等待异常发生的情况下防御性地编码的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我已经阅读了

How do I discover memory usage of my application in Android?和其他一些答案,但不能完全解决这个问题……

我有一个Activity,它将一个文件从外部存储器加载到内存中,并在内存中进行一些解析/操作/等操作.在我加载它之前,我想猜测这样做是否会导致OutOfMemoryException并使Activity崩溃(我知道确切的答案是不可能的,估计总比没有好.)

从上面提到的答案中,我提出:

ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(ACTIVITY_SERVICE);

MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();

activityManager.getMemoryInfo(memoryInfo);

int pid [] = {android.os.Process.myPid()};

android.os.Debug.MemoryInfo[] mi = activityManager.getProcessMemoryInfo(pid);

// calculate total_bytes_used using mi...

long available_bytes = activityManager.getMemoryClass()*1024*1024 - total_bytes_used;

所以,问题:

1)我疯了吗?

2)如何从MemoryInfo对象中总计值来估计活动/任务的堆使用情况? (上面的链接给出了pss / private-dirty / shared-dirty的概述,但没有足够的信息来猜测如何进行总计.)

3)Debug是否始终存在或仅在调试时?

4)有更聪明的方法吗?

我知道使用更少的内存是件好事,我是.我很想知道如何在防守方面进行编码.等待异常知道你的内存不足,似乎很奇怪.

谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值