我有一段代码,它在 Android NDK 中分配了大量内存。最后我需要的是使用 try - catch block 来寻找可能性,可能会出现 NoMemoryError。知道原生SDK怎么写吗?
我需要实现与此相同的功能:
for(int i=1;i<50;i++){
try{
int[] mega =new int[i*1024*1024];//1MB
}catch (OutOfMemoryError e) {
usedMemory= (Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory())/new Float(1048576.0);
usedText=usedMemory+" MB";
tw.setText(usedText);
break;
}
}
最佳答案
在您的 JNI 函数中,您可以使用以下代码 fragment 抛出 Java 异常。编译 native 代码时,确保启用 RTTI 和异常。
try {
int *mega = new int[1024 * 1024];
} catch (std:: bad_alloc &e) {
jclass clazz = jenv->FindClass("java/lang/OutOfMemoryError");
jenv->ThrowNew(clazz, e.what());
}
在 Java 中,您可以简单地捕获 OutOfMemoryError。
try {
// Make JNI call
} catch (OutOfMemoryError e) {
//handle error
}
关于Android NDK - 尝试用 NoMemoryError 捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10043755/