編輯:中級開發
除了Throw或ThrowNew來拋出異常外,還提供了5個函數來處理,分別為jthrowable ExceptionOccurred(JNIEnv *env);、void ExceptionDescribe(JNIEnv *env);、void ExceptionClear(JNIEnv *env); 、 jboolean (JNIEnv *env) 和void FatalError(JNIEnv *env, const char *msg);
1. ExceptionCheck 用於檢測如果一個異常已經拋出,則該方法將會返回JNI_TRUE就是typedef定義為1的布爾值。
2. ExceptionOccurred 獲取正在拋出一個異常的本地引用,Native或Java層必須處理該異常,並返回一個jthrowable對象。
3. ExceptionDescribe主要用於打印出異常的錯誤描述。
4. ExceptionClear清除剛剛拋出的異常。
5. FatalError 的作用比較特殊,產生一個致命性的錯誤,android123提示這樣會導致JVM將關閉,就是程序停止運行了,所以使用時要謹慎。
我們以C++的代碼做個例子,簡單的說明下他們的使用方法
env->FindClass("android123CWJ"); //假設這個類本身不存在
if(env->ExceptionCheck())
{
env->ExceptionDescribe();
env->ExceptionClear();
}
這樣JVM因為查找android123CWJ類不存在,導致了一個NoClassDefFoundError的異常。
在JNI中處理資源同步問題,JNI提供了一組函數分別為jint MonitorEnter(JNIEnv *env, jobject obj); 和 jint MonitorExit(JNIEnv *env, jobject obj); 方法,類似一個簡單的同步鎖,在Java中我們這樣寫
synchronized (obj) {
//DOSomething
}
在JNI中,我們使用這組函數這樣寫
(*env)->MonitorEnter(obj);
//DOSomething
(*env)->MonitorExit(obj);
明天android開發網繼續講解JNI相關的內容,詳細說明下JNI中Java類的構造,查找以及方法和字段的訪問等知識,希望有空的網友先了解下Java的反射以及動態代理相關知識這樣可以更好的理解我們的最後一節 android JNI開發高級篇有關的內容。
簡介: BFS 是一款專門為 Linux 桌面環境所設計的內核調度器,它基於 Staircase Deadline 和 EEVDF 算法,支持 Linux 2
這幾天搞了搞AIDL,終於弄明白了在AIDL中讓Service調用Activity的方法代碼:首先建立一個ICallback.aidl文件,作為Activity中的回調
Android ANR這個錯誤大家並不陌生,但是從Android 2.2開始出錯的ANR信息會自動上傳給Google進行系統分析改進,當然了你的應用ANR錯誤其實保存在
簡介: HTML 5 中一個最有用的新特性是本地存儲的標准化。最終,Web 開發人員可以不再試圖將所有客戶端數據都填塞到 4 KB 的 CookIEs 中。現