Android 支持设备上的艺术与预构建图像上的艺术
我们在Play Store中有几个应用程序。作为对新的棒棒糖版本的准备测试,我想看看我们的应用程序在哪里 我采取的第一种方法是使用三星Google Edition S4,并告诉它启用并重新启动Nexus 5上的ART运行时环境。这让我明白了一些问题,当Nexus9正式发布时,我可以解决这些问题 然而,后来发布了一个版本,将棒棒糖5.0推向Nexus7。把它推到那里给我带来了更多的问题。然而,印刷品似乎仍然与艺术有关。例如: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
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规范开发人员部分中指出的协议。不过,我很感激你的建议。