需求:测试android 设备以太网口的黄灯和绿灯是否正常
ThreadUtils.runOnSubThread(new Runnable() {
@Override
public void run() {
Log.d("coco","test network 1000m start.");
LinuxCommandRunner.exec("su");
LinuxCommandRunner.exec("ethtool -s eth0 speed 1000 duplex full");
Log.d("coco","test network 1000m end.");
}
});
ThreadUtils 就是个线程池工具,直接new Thread也可以。
LinuxCommandRunner就是执行linux指令的工具类。
ThreadUtils.java
package com.xxxxx.xxxxx;
import android.os.Handler;
import android.os.Looper;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
public class ThreadUtils {
private static final Handler sHandler = new Handler(Looper.getMainLooper());
private static final Executor sExecutor = Executors.newSingleThreadExecutor();
public static void runOnSubThread(Runnable runnable){
sExecutor.execute(runnable);
}
public static void runOnUIThread(Runnable runnable){
sHandler.post(runnable);
}
public static void shutdown(){
sExecutor.shutdown();
}
}
LinuxCommandRunner.java
package com.rockchip.devicetest.utils;
import android.util.Log;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class LinuxCommandRunner {
private static final String TAG = LinuxCommandRunner.class.getSimpleName();
public static String runCommand(String[] args) {
// 要执行的Linux指令
String linuxCommand = "timeout 0.5s top";
try {
// 执行Linux指令
Process process = Runtime.getRuntime().exec(linuxCommand);
// 读取Linux命令的输出
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
StringBuilder output = new StringBuilder();
while ((line = reader.readLine()) != null) {
output.append(line).append("\n");
}
// 打印执行结果
Log.d(TAG,output.toString());
// 检查执行结果
int exitCode = process.waitFor();
if (exitCode == 0) {
Log.d(TAG,"Linux命令执行成功");
} else {
Log.d(TAG,"Linux命令执行失败");
}
return output.toString();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
return null;
}
public static void exec(String command){
try {
Runtime.getRuntime().exec(new String[]{"sh","-c",command});
} catch (IOException e) {
e.printStackTrace();
}
}
}