編輯:關於Android編程
JNI技術的一些約束:
1.只在原生方法執行期間及正在執行原生方法的線程環境下局部引用時有效的,局部引用不能在多線程間共享,只有全局引用可以被多個線程共享。
2.被傳遞給每個原生放的的JNIEnv接口指針在與方法調用相關的線程中也是有效的,它不能被其他線程緩存或使用。
JNI的監視器允許原生代碼利用Java對象同步,虛擬機保證存取監視器的線程能夠安全執行,而其他線程等待監視器對象編程可用狀態,例如:
synchronized(obj){ /*同步線程安全代碼塊*/ }
在原生代碼中相同級別同步可以用JNI的監視器方法實現的,例如:
if(JNI_OK == (*env)->MonitorEnter(env,obj)){ /*錯誤處理*/ } /*同步線程安全代碼塊*/ if(JNI_OK == (*env)->MonitorExit(env,obj)){ /*錯誤處理*/ }
為了執行特定任務,這些原生構件可以並行使用原生線程。為了與應用的依然活躍部分交互,衍生線程應該先附著在虛擬機上。
JNI通過JavaVM接口指針提供了AttachCurrentThread函數以便讓原生代碼將原生線程附著到虛擬機上,例如:
JavaVm* cachedJvm; …… JNIEnv* env; …… /*將當前線程附著到虛擬機上*/ (*cachedJvm)->AttachCurrentThread(cachedJvm,&env,NULL); /*可以用JNIEnv接口實現線程與java應用程序的通信*/ /*將當前線程與虛擬機分離*/ (*cachedJvm)->DetachCurrentThread(cachedJvm);
對AttachCurrentThread函數的調用允許應用程序獲得對當前線程有效的JNIEnv接口指針。
1、Service的種類 按運行地點分類: 類別區別 優點缺點 應用本地服務(Local)該服務依附在主進程上, 服務依附在主進
最近在項目中需要對外部存儲設備的狀態進行監聽,所以整理了此筆記,以便日後查看。 外部存儲設備的狀態變化時發出的廣播
前言:前面一篇分析了mediaplayerservice及MediaPlayer中的CS模型,但是對於如何能把數據解析出來,渲染到最終的SurfaceView上顯示,並且
網格布局標簽是GridLayout。這個布局是android4.0新增的布局。這個布局只有4.0之後的版本才能使用。不過新增了一些東東①跟LinearLayout(線性布