Android 支持设备上的艺术与预构建图像上的艺术

Android 支持设备上的艺术与预构建图像上的艺术,android,android-runtime,Android,Android Runtime,我们在Play Store中有几个应用程序。作为对新的棒棒糖版本的准备测试,我想看看我们的应用程序在哪里 我采取的第一种方法是使用三星Google Edition S4,并告诉它启用并重新启动Nexus 5上的ART运行时环境。这让我明白了一些问题,当Nexus9正式发布时,我可以解决这些问题 然而,后来发布了一个版本,将棒棒糖5.0推向Nexus7。把它推到那里给我带来了更多的问题。然而,印刷品似乎仍然与艺术有关。例如: 11-03 09:22:29.419: E/art(6256): Tri

我们在Play Store中有几个应用程序。作为对新的棒棒糖版本的准备测试,我想看看我们的应用程序在哪里

我采取的第一种方法是使用三星Google Edition S4,并告诉它启用并重新启动Nexus 5上的ART运行时环境。这让我明白了一些问题,当Nexus9正式发布时,我可以解决这些问题

然而,后来发布了一个版本,将棒棒糖5.0推向Nexus7。把它推到那里给我带来了更多的问题。然而,印刷品似乎仍然与艺术有关。例如:

11-03 09:22:29.419: E/art(6256): Tried to mark 0xfe80a920 not contained by any spaces
11-03 09:22:29.419: E/art(6256): Attempting see if it's a bad root
11-03 09:22:29.420: A/art(6256): art/runtime/gc/collector/mark_sweep.cc:381] Can't mark invalid object
接着是一声巨响

你们有没有发现,艺术的某些特征与5.0+的互动方式不同,而不是5.0之前的互动方式?可能是最近的操作系统有更严格的要求导致了这种情况

在发布之前,我没有使用过这些可下载的构建。与即将发布的实际版本相比,它们可靠吗

更新

这个问题已经解决了,并且确实有一些事情要做,比如从本机代码误用某些方法调用到java对象。因为我能够在第一时间解决甚至需要进行这些调用的问题,所以我只是在这个特定的本机代码段上删除了这个代码段,并用Java进行了替换


这在本机代码中似乎不是问题,因为断点是在本机代码之后接收的,但很明显,在稍后的某个时间点上,它在稍后的给定时间点上导致了一些未确定的崩溃。与Dalvik相比,也许只需设计艺术的工作原理。

如果您使用本机C/C代码,请检查是否使用GetArrayElements和ReleaseArrayElements,并将其替换为:GetArrayRegion:

有一个替代调用,如GetArrayElements和 GetStringChars,当您只需要 将数据复制进或复制出。考虑以下事项:

jbyte* data = env->GetByteArrayElements(array, NULL);
if (data != NULL) {
    memcpy(buffer, data, len);
    env->ReleaseByteArrayElements(array, data, JNI_ABORT);
} This grabs the array, copies the first len byte elements out of it, and then releases the array. Depending upon the implementation,
Get调用将锁定或复制数组内容。代码 复制数据可能是第二次,然后调用Release;在里面 这种情况下,JNI_中止确保没有第三次复制的机会

人们可以更简单地完成同样的事情:

env->GetByteArrayRegion(array, 0, len, buffer); This has several advantages:
需要一个JNI调用而不是2个,从而减少了开销。不需要 固定或额外的数据拷贝。降低程序员出错的风险- 在某些东西失败后,没有忘记调用Release的风险。 类似地,可以使用SetArrayRegion调用将数据复制到 数组,以及用于复制字符的GetStringRegion或GetStringUTFRegion 一丝不苟

更多信息:

我一直在尝试遵循这些协议以及Android 5.0规范开发人员部分中指出的协议。不过,我很感激你的建议。