精華區beta Android 關於我們 聯絡資訊
因為考慮效能的因素,其實可以透過ProcessBuilder 來呼叫使用top -n 1的linux指令,但是因為這樣呼叫,每次都要 花費數秒以上來運作,並且無法達到即使顯示的效果 所以才改用ndk來運作。 程式碼如下, jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ) { char buf[50]; int ch; memset(buf, '\0', sizeof(buf)); fp=popen("top -n 1","r"); String temp; if (fp!=NULL) { ch=fread(buf,sizeof(char),100,fp); if (ch > 0) { //這段不會顯示 printf("%s\n",buf); } pclose(fp); } return (*env)->NewStringUTF(env,"test"); } 但是運用這種方式來啟動,視窗卻會瞬間跳掉, 並無法停留,並且正確的顯示test 更別說將top的內容完整的印出。 想請問是否哪裡有問題,或著有其他的方式可以迅速的擷取top的內容? ps.敝人知道此程式無法將訊息顯示在android上,只是想詢問說為何視窗無法正常啟動。 ps2.此程式是用內建的jni-hello改的 麻煩知道的人,不吝賜教 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.36.27.189
FirstFan:你的code裡最後並沒有把結果返回啊,print是不會顯示啦 12/01 09:50
FirstFan:我覺得你或許可以試試用Runtime.exec來call下top -n 1 > 12/01 09:51
FirstFan:tmp 這種方式,然後直接從tmp文件讀取內容 12/01 09:51
dreamroyc:FirstFan 謝謝你,現在主要的問題在於視窗會消失。 12/01 10:37
dreamroyc:啟動後,看到訊息視窗一下,就會跳回主畫面。 12/01 10:39
FirstFan:看看logcat的輸出有沒有什麼不對的嘍 12/01 16:25
dreamroyc:好像不支援 > 的方式 12/02 13:45
FirstFan:後面的不能直接用tmp,我覺得用/sdcard/tmp可能可以 12/02 15:12
FirstFan:不然寫入的路徑可能是read-only或者沒有權限 12/02 15:13