作者dreamroyc ()
看板Android
標題[開發] NDK
時間Tue Dec 1 00:32:44 2009
因為考慮效能的因素,其實可以透過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