【发布时间】:2018-03-24 16:10:27
【问题描述】:
【问题讨论】:
-
我也在找这个,你找到解决办法了吗?由于所有的 cmets 和解决方案都没有提供您所请求的信息附近的任何地方......
【问题讨论】:
由于Android是基于Linux内核的修改版本,我们可以使用同样的Linux命令根据documentation检索CPU信息。
此虚拟文件标识系统使用的处理器类型 - /proc/cpuinfo
可以通过ADBshell执行命令
ADB 命令:
adb shell cat /proc/cpuinfo
在Java API 中使用ProcessBuilder,您可以从Android 应用程序执行shell 命令,如下所示。
Java API:
try {
String[] DATA = {"/system/bin/cat", "/proc/cpuinfo"};
ProcessBuilder processBuilder = new ProcessBuilder(DATA);
Process process = processBuilder.start();
InputStream inputStream = process.getInputStream();
byte[] byteArry = new byte[1024];
String output = "";
while (inputStream.read(byteArry) != -1) {
output = output + new String(byteArry);
}
inputStream.close();
Log.d("CPU_INFO", output);
} catch (Exception ex) {
ex.printStackTrace();
}
示例输出:
【讨论】:
首先,我尝试解析“top”命令输出以获取总体使用情况,以及我的 onw 应用程序。但我发现如果我从 adb shell 或应用程序运行顶部,结果完全不同。 该应用程序报告了大约一半的 CPU 使用率,位于 adb(以及 android profiler 选项卡)。所以使用 top 不是解决方案。
在我看来,您需要解析“/proc/stat”文件。 感谢 Souch 提供的this question 和code,这项工作已经为我们完成了。每次需要时,只需使用他的 CpuInfo 类来获取平均负载。
【讨论】:
使用此函数获取 CPU 详细信息。
public static String getCPUDetails(){ /* *Created By Atiar Talukdar * 01/01/2018 * contact@atiar.info */ ProcessBuilder processBuilder; String cpuDetails = ""; String[] DATA = {"/system/bin/cat", "/proc/cpuinfo"}; InputStream is; Process process ; byte[] bArray ; bArray = new byte[1024]; try{ processBuilder = new ProcessBuilder(DATA); process = processBuilder.start(); is = process.getInputStream(); while(is.read(bArray) != -1){ cpuDetails = cpuDetails + new String(bArray); //Stroing all the details in cpuDetails } is.close(); } catch(IOException ex){ ex.printStackTrace(); } return cpuDetails; }
预期输出如 - (我使用模拟器生成输出)
vendor_id : GenuineIntel
cpu family : 6
model : 61
model name : Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
stepping : 4
cpu MHz : 2699.883
cache size : 3072 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat
pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm
constant_tsc pebs bts rep_good nopl eagerfpu pni pclmulqdq dtes64 ds_cpl ssse3
sdbg fma cx16 xtpr pdcm movbe popcnt aes xsave avx f16c rdrand hypervisor
lahf_lm retpoline fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms xsaveopt
bugs : cpu_meltdown spectre_v1 spectre_v2
bogomips : 5399.76
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 61
model name : Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
stepping : 4
cpu MHz : 2699.883
cache size : 3072 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 1
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat
pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm
constant_tsc pebs bts rep_good nopl eagerfpu pni pclmulqdq dtes64 ds_cpl ssse3
sdbg fma cx16 xtpr pdcm movbe popcnt aes xsave avx f16c rdrand hypervisor
lahf_lm retpoline fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms xsaveopt
bugs : cpu_meltdown spectre_v1 spectre_v2
bogomips : 5399.76
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:
s : cpu_meltdown spectre_v1 spectre_v2
bogomips : 5399.76
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 61
model name : Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
stepping : 4
cpu MHz : 2699.883
cache size : 3
【讨论】:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import java.io.IOException;
import java.io.InputStream;
public class MainActivity extends AppCompatActivity {
TextView textView ;
ProcessBuilder processBuilder;
String Holder = "";
String[] DATA = {"/system/bin/cat", "/proc/cpuinfo"};
InputStream inputStream;
Process process ;
byte[] byteArry ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.textView);
byteArry = new byte[1024];
try{
processBuilder = new ProcessBuilder(DATA);
process = processBuilder.start();
inputStream = process.getInputStream();
while(inputStream.read(byteArry) != -1){
Holder = Holder + new String(byteArry);
}
inputStream.close();
} catch(IOException ex){
ex.printStackTrace();
}
textView.setText(Holder);
}
}
更多信息:
【讨论】:
/proc/cpuinfo 而不是生成外部 cat 命令吗?