編輯:高級開發
除了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開發高級篇有關的內容。
目前android的程序商店(android Market)還沒有向所有開發者開放,但是Google已經承諾android Market將向更多國家開發者開放,本文為一
2011 年 2 月,Danger 時代結束。T Mobile 的新 CEO Philipp Humm 實施新計劃,確認了向現有的 Sidekick 用戶關閉 Dang
android程序可以促使移動設備的創新,讓用戶體驗到最優越的移動服務,同時,開發商也將得到一個新的開放平台,開發既有用又有吸引力的移動服務,並推廣這些產品。這是更加a
谷歌傾力打造的android系統平台智能手機操作系統,而相應的終端OPhone也已經推出了近十款之多。那麼隨著谷歌及android系統可能面臨的變動,OPhone自然也