2012-07-27 58 views
0

我正在嘗試構建一個Android應用程序,該應用程序使用現有的C庫進行一些後臺操作(即執行一些電臺掃描,調諧到電臺等)。作爲獨立的C可執行文件,主循環可以處理來自較低級別(硬件組件)的消息處理。我的理解是,使用JNI,不需要主函數,因爲Android NDK:處理消息的JNI「主」?

1)共享庫中創建和

2)共享庫,只要加載它的Java線程是活的「活着」 。

因此,假設C庫使用多個線程:那麼通常在初始主循環中完成的消息處理應該在哪裏完成?是否像通過調用與JNI函數一起聲明的C函數一樣簡單?

回答

0

Re 2)庫中的「活着」意思是堅持記憶。但它本身並沒有做任何事情。如果你需要庫來「做某件事」,即使沒有函數被JNI調用,那麼你當然需要一個單獨的本地線程。您可以創建線程並在常規的JNI函數調用(init方法或爲此使用JNI_OnLoad)內啓動消息循環。當JNI函數調用返回時,它將繼續運行。然後你還需要一個拆卸方法,它可以阻止線頭並將其撕下(JNI_OnUnload可用於此)

+0

太好了,謝謝!這很好地解釋了它。 – user1558080 2012-07-30 16:33:51