編輯:關於Android編程
一、捕獲異常
異常處理是Java中的功能,在Android中使用SDK進行開發的時候經常要用到。Android原生代碼在執行過程中如果遇到錯誤,需要檢測,並拋出異常給Java層。執行原生代碼出現了問題,例如使用了空指針、內存洩漏,並且沒有做相應的檢測盒異常拋出,APP會馬上閃退,沒有任何提示。
JNI中的異常處理和Java的不一樣。Java中的異常處理,是直接捕獲,然後做相應的處理。JNI要求開發人員在異常發生之後顯式實現異常處理流。例如以下例子:
public class JavaClass {
/**
* 異常拋出方法
*/
private void throwException() throws NullPointerException {
throw new NullPointerException("Null pointer");
}
/**
* 原生方法
*/
private native void nativeMethod();
}在原生方法nativeMethod中調用throwException方法,nativeMethod原生方法需要顯示地做異常處理。JNI提供了ExceptionOccurred函數查詢虛擬機是否有掛起的異常。在使用完之後,還需要ExceptionClear函數顯式地清除異常。
jthrowable ex;
//...
(*env)->CallVoidMethod(env, instance, throwExceptionId);
ex = (*env)->ExceptionOccurred(env);
if (0 != ex) {
(*env)->ExceptionClear(env);
}二、拋出異常
JNI也允許原生代碼拋出異常。由於異常是Java的類,所以在JNI中需要用FindClass函數找到異常類,用ThrowNew函數就可以初始化並拋出新的異常。例如:
jclass clazz;
//...
clazz = (*env)->FindClass(env, "java/lang/NullPointerException");
if (0 != clazz) {
(*env)->ThrowNew(env, clazz, "Exception message.");
} 因為原生方法不受虛擬機的控制,所以拋出的異常並不會停止原生方法的執行。在拋出異常的時候,需要釋所有已經分配的資源,例如內存資源...通過JNIEnv接口獲得的局部引用,在原生方法返回之後會被虛擬機自動釋放。
Android下拉刷新上拉加載控件,對所有View通用!
前面寫過一篇關於下拉刷新控件的博客下拉刷新控件終結者:PullToRefreshLayout,後來看到好多人還有上拉加載更多的需求,於是就在前面下拉刷新控件
Android相冊效果(使用C#和Java分別實現)
運行效果C#實現using Android.App;using Android.OS;using Android.Widget;namespace ImageDemo{
android-----事件分發機制測試系列
先來說說我遇到的問題,這次測試使用的布局文件是: 也就是說布局圖是醬紫的:具體就是我在MyRelativeLayo
android之客戶端從服務端解析數據及上傳與反饋數據
1、json從服務端解析服務端數據客戶端的運行結果本來是這樣的[{id:1,title:"馬雲",publishTime:Sat May 14 15: