Android NDK - 尝试用 NoMemoryError 捕获

标签 android exception exception-handling android-ndk

我有一段代码,它在 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/

相关文章:

android - 键盘布局切换在 Android Studio 中无法正常工作

用于密码验证的php

android - openOptionsMenu 不适用于全屏

c# - 如何从托管代码中捕获的 native 异常中获取 native 堆栈跟踪

java - 返回一个值并抛出异常?

android - Room (SQLite) 带有空参数的 WHERE 子句不起作用

java - "insert "new ClassType ( )"to complete Expression"是什么意思?

C++异常处理查询

c++ - 是否可以同时有两个或多个事件异常?

c# - 设置图像时参数无效