直接上代碼:
class MyThreadStart extends Thread {
public void run() {
try {
@SuppressWarnings("unused")
Process proc = Runtime.getRuntime().exec(
"su -c ./data/misc/command_start.sh");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
showState.setText("服務已啓動");
}
});
try {
Process proc = Runtime.getRuntime().exec(
"su -c ./data/misc/command_changeIP.sh");
final byte b[] = new byte[1024];
r = 0;
i = 0;
line = "";
final StringBuilder sb = new StringBuilder(line);
while ((r = proc.getErrorStream().read(b, 0, 1024)) > -1) {
if(i % 100 == 0){
sb.delete( 0, sb.length() );
}
line = new String(b, 0, r);
sb.append(line);
sb.append("\n");
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
scroll.scrollTo(0, showState.getHeight());
//showState.setMovementMethod(new ScrollingMovementMethod());
showState.setText(sb.toString());
}
});
i++;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
調用shell腳本並將結果顯示到TextView中。
由於我的輸出是連續不斷的,於是我將輸出的內容每隔100條信息就清空一次,否則運行一段時間後軟件就會卡死。
並且,該系統是要長時間運行的,所以當按下返回鍵離開後,再次進入軟件我要能夠看到正常運行的界面,所以我將返回鍵設置成和HOME鍵一樣的效果:
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
// super.onBackPressed();
Intent i = new Intent(Intent.ACTION_MAIN);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addCategory(Intent.CATEGORY_HOME);
startActivity(i);
}
這樣,返回鍵和HOME鍵達到的效果一樣。