android - 如何防止我的 android jni 调用中的代码停滞?

标签 android c++ java-native-interface opencl native-activity

我正在移植一个已经用 C++ 编写以在 Linux 上运行的应用程序,现在需要在 Android 设备上运行。它是一个 GPU 密集型应用程序,可以进行 OpenCL 调用,运行一组测试。这些可能需要数小时或数天才能完成运行。

我有一个 Java Activity ,它读取一些基本输入,然后将其传递给 JNI。

对于较短的操作它运行良好,但超过几秒就会暂停;我可以取消暂停它,它会继续运行,但之后它每执行一百次左右的操作就会严重挂起(本应花费不到一秒的时间需要一分钟)。

是不是我在 Android 知识方面缺乏某些东西,我忽略了一些可能导致这种情况的严重谬误?将所有代码移动到 NativeActivity 是否更有意义?或者我是否只需要经常调用 Java 来显示一些内容以防止操作系统将我关闭?

感谢有耐心回答我问题的 friend

最佳答案

在 Android 上,一个严格的规则是 CPU 密集型长时间操作不应在 UI 线程上运行。切换到 NativeActivity 或回调以显示某些内容都无济于事,但如果您在工作线程上运行测试,我可能会不时更新屏幕,以便用户跟踪总体进度。

关于android - 如何防止我的 android jni 调用中的代码停滞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33200907/

相关文章:

java - 类型参数 t 具有不兼容的上限 View 和 web View

java - Android Studio 中的时间线过滤器

android - Flash Android 屏幕与准确的时间

安卓网络服务

c++ - 将 YUY2 转换为 YV12

c++ - Visual Studio 2013 中的 select_on_container_copy_construction 内部错误

c++ - *v8::String::Utf8Value(args[0]->ToString()) 不返回 node.js 插件参数的字符串

android - 带有 utf8 字符的 jstring(JNI) 到 std::string(c++)

静态加载的 Java JNI UnsatisfiedLinkError

java - Apache Arrow Plasma 客户端 - 无法连接到内存存储 (UnsatisfiedLinkError)