1. 일반적인 JNI function call 은 NULL 과 같은 return 으로 예외상황을 알립니다.
2. return value를 통해 error 인지 알 수 없을 경우에는 exception check 를 해주어야 합니다. 현재 thread 에서 일어난 pending exception 의 체크는 ExceptionOccurred 를 통해 check 할 수 있습니다. ( JDK 1.2 에서는 ExceptionCheck 를 사용할 수 있습니다. )
3.Native code 는 pending exception 을 다음과 같이 2가지 방법으로 처리합니다.
- exception 발생시 바로 return 을 해서 caller 가 exception을 handle 할 수 있도록 합니다.
- ExceptionClear 를 호출하여 exception 을 clear 한 후에 error handling 을 해당 코드에서 수행.
다른 JNI function 을 호출하기 전에 pending exception 을 check 하고 handle 한 다음에 clear 해주는것은 "엄청나게" 중요합니다. pending exception 이 있는 상태로 다른 JNI 함수를 호출하는 것은 엄청나게 위험합니다. 어떤 결과를 초래할 지 모릅니다. Exception 이 발생한 상황에서는 exception 을 handle 하거나, resource 를 해제하는 등의 방어적인 느낌의 JNI function 들만 안전하게 call 할 수 있습니다.
ExceptionCheck 함수는 JDK 1.2 부터 등장합니다. ExceptionOccurred 와 비슷합니다. 다른 점은 ExceptionCheck 는 exception object 에 대한 reference 를 던지지 않고, JNI_TRUE 나 JNI_FALSE 만을 던집니다. 그래서 그냥 exception 여부만 알려면 ExceptionCheck 가 ExceptionOccurred 보다 좋습니다.
'안드로이드' 카테고리의 다른 글
주말공부 리스트 (0) | 2023.02.24 |
---|---|
미디어코덱 - 비디오,오디오 디코딩 및 재생 (0) | 2023.02.24 |
[JNI] C++코드로 JAVA 의 Priavate를 접근할 수 있는가? (0) | 2023.02.07 |
MediaCodec OPENGL 관련 영상 및 게시글 (0) | 2023.02.04 |
안드로이드 와 JNI 에대한 포스트 (0) | 2023.01.24 |