我已经阅读了如何在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;
Run Code Online (Sandbox Code Playgroud)
所以,问题:
1)我疯了吗?
2)如何从MemoryInfo对象中总计值来估计活动/任务的堆使用情况?(上面的链接概述了pss/private-dirty/shared-dirty,但没有足够的信息来猜测如何进行总计.)
3)Debug是否始终存在或仅在调试时?
4)有更聪明的方法吗?
像这样的答案:关于android中最大堆大小和可用内存的两个问题似乎暗示没有比这更好的方法?
我知道使用更少的内存是件好事,我是.我很想知道如何在防守方面进行编码.等待异常知道你的内存不足,似乎很奇怪.
谢谢!
我在Eclipse中设置了以下选项,以传递给窗口中的模拟器命令- >首选项 - > Android - >启动 - >默认模拟器选项:" - cpu-delay 0 -no-boot-anim -cache/my/custom/path/to/androidcache /"(不带引号).他们似乎被忽略了?
我从Android Emulator的启动选项中了解到不适用于Eclipse插件吗?我还可以在运行 - >运行配置中设置自定义模拟器选项,但这会带来一系列不同的不便.
有什么想法吗?我已经考虑用一个用所需选项反映到它的脚本替换" 模拟器 "二进制文件.这有什么害处(也许会干扰升级)?
我正在使用Eclipse 3.6(Helios),ADT 10.0.1,SDK 10.
更新:我从上面的相同链接看到,或许这个设置只是为了在创建新项目时预先填充运行配置,这似乎记录不清,只是适度有用,因为从AVD管理器启动的模拟器忽略它(除非我'我错过了什么)?
Update2:我制作了一个脚本来替换模拟器二进制文件,并用所需的选项反映出来.工作良好.我认为它会在更新时被覆盖.这是我在将模拟器二进制文件移动到emulator_real(linux环境)之后所做的:
#!/bin/sh
/path/to/android-sdk-linux_x86/tools/emulator_real -cpu-delay 0 -no-boot-anim $@ >> /home/myusername/emulator_out.txt
Run Code Online (Sandbox Code Playgroud)
我无法使用缓存的备用目录(如上所示)...它导致错误,说缓存正在使用等,我认为这与android有关,似乎不能在异构文件系统中正常工作.