2014-11-03 1 views
0

Play 스토어에는 여러 가지 애플리케이션이 있습니다. 새로운 Lollipop 출시에 대한 준비 테스트로서, 우리의 응용 프로그램이 어디에 있었는지보고 싶었습니다.지원되는 기기의 ART 대 미리 만들어진 이미지의 ART 대

내가 취한 첫 번째 방법은 삼성 Google 에디션 S4를 사용하여 ART 런타임 환경 (Nexus 5에서도 사용 가능)을 사용 설정하고 다시 부팅하는 것입니다. 이것은 Nexus 9 릴리스에서 공식적으로 해결할 수있는 몇 가지 문제를 알려줍니다.

그러나 Lollipop 5.0을 Nexus 7에 푸시하기위한 빌드가 출시되었습니다. 거기에 추가로 문제가 발생했습니다. 그러나 인쇄물은 ART와 관련이있는 것 같습니다. 예 :

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 

다음에 충돌이 발생합니다.

여러분은 ART의 특정 기능이 5.0 이전 버전과 상호 작용하는 방식과 다른 방식으로 상호 작용하는 것으로 나타 났습니까? 아마도 최근 운영 체제에 더 엄격한 요구 사항이 있습니다.

이전에 릴리스하기 전에 다운로드 가능한 빌드로 작업하지 않았습니다. 앞으로 출시 될 실제 출시 버전과 비교하여 신뢰할 수 있습니까? 문제가 해결 특정 방법의 오용의 라인을 따라 할 수있는 뭔가가했던되었습니다

UPDATE는 네이티브 코드에서 자바 객체로 호출합니다. 이러한 호출을 처음부터 수행해야 할 필요가 없기 때문에이 특정 코드 세그먼트에서이 코드 세그먼트를 제거하고 대신 Java에서 수행했습니다.

네이티브 코드 이후에 중단 점이 수신되었으므로 원시 코드에서 문제가되지 않았지만 나중에 특정 시점에서 나중에 해당 시점에서 일부 불확실한 충돌이 발생했습니다. 아마도 단순히 Dalvik과 비교하여 ART가 작동하는 방식을 고안했을뿐입니다. GetArrayElements 및 ReleaseArrayElements를 사용하고로 교체

답변

0

하는 네이티브 C를 사용하는 경우/C는 # 코드 확인하는 경우 : 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, 

가져 오기 호출 핀 중 하나 또는 배열의 내용을 복사 : 다음 고려하십시오. 코드 은 데이터를 복사하고 (아마도 두 번째), 릴리스를 호출합니다. 이 경우 JNI_ABORT는 세 번째 복사본이 없을 것을 보장합니다.

하나는 더 간단하게 같은 일을 수행 할 수 있습니다

env->GetByteArrayRegion(array, 0, len, buffer); This has several advantages: 

오버 헤드를 감소 하나 JNI 호출 대신이 필요합니다. 고정 또는 추가 데이터 사본이 필요하지 않습니다. 프로그래머 오류의 위험을 줄입니다. 무언가가 실패한 후에 릴리스에 전화하는 것을 잊을 위험이 없습니다. 마찬가지로 SetArrayRegion 호출을 사용하여 배열로 데이터를 복사하고 GetStringRegion 또는 GetStringUTFRegion을 사용하여 문자열에서 문자를 복사 할 수 있습니다.

상세 정보 : 나는 안드로이드 5.0 사양의 개발자 섹션에서 지적 그뿐만 아니라 이러한 프로토콜을 따르도록 시도하고있다 http://developer.android.com/training/articles/perf-jni.html#region_calls

+0

. 그러나 제안을 감사하십시오. –