Android學習JNI,使用C調用JAVA語言

來源:互聯網
上載者:User

標籤:c調用java語言

本節學習使用C語言調用JAVA語言。在生活中比如我們某些底層的硬體必須使用C語言去編寫,當C語言返回的某些數值顯示在介面上時,就比如使用JNI。這樣可以將C返回的值顯示在介面上。

本節類比感應器返回的值,通過進度條顯示靈敏度,然後顯示到介面上。

1:介面布局就補多說了。裡面就2個Button,一個用於開啟監控,一個用於關閉監控,一個進度條

2:Activity代碼如下:

//開始監控buttonpublic void start(View v){startMonitor();}//停止監控buttonpublic void stop(View v){stopMonitor();}//開始監控和停止監控的本地方法public native void startMonitor();public native void stopMonitor();//c語言調用java的重新整理進度條函數public void showValue(int progress){bar.setProgress(progress);}
3:本地JNI代碼

#include <jni.h>#include <stdio.h>#include <stdlib.h>int monitor = 1;//隨機產生的值int getPressure(){return rand()%100;}/* * Class:     com_demo_ccalljava_MainActivity * Method:    startMonitor * Signature: ()V */JNIEXPORT void JNICALL Java_com_demo_ccalljava_MainActivity_startMonitor  (JNIEnv *env, jobject obj){while(monitor){//擷取當前的壓力值int value = getPressure();//利用反射找打show方法//1:找到位元組碼檔案jclass cClass = (*env)->FindClass(env, "com/demo/ccalljava/MainActivity");//2:找到方法id//show是調用java方法的名字, (I)V是該方法的簽名jmethodID methodID = (*env)->GetMethodID(env,cClass, "showValue", "(I)V");//3:調用方法(*env)->CallVoidMethod(env, obj, methodID, value);sleep(1);}}/* * Class:     com_demo_ccalljava_MainActivity * Method:    stopMonitor * Signature: ()V */JNIEXPORT void JNICALL Java_com_demo_ccalljava_MainActivity_stopMonitor  (JNIEnv *env , jobject obj){monitor = 0;}

3:載入動態庫

static{System.loadLibrary("CCallJava");}
4:開始監控顯示:

當按下開始後,出現了卡死GUI,這是因為startMonitor是跑在主線程的,所以卡住GUI

5:修改,startMonitor運行在子線程

//開始監控buttonpublic void start(View v){Thread thread = new Thread(){@Overridepublic void run() {startMonitor();}};thread.start();}

6:運行再次顯示效果:

可以正常顯示。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Android學習JNI,使用C調用JAVA語言

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.