在Android开发中,可以在一个服务中开启logcat程序抓android log,代码如下
public void onCreate() {
super.onCreate();
new Thread(){
public void run() {
try {
File file = new File(Environment.getExternalStorageDirectory(),"log.txt");
FileOutputStream fos = new FileOutputStream(file);
Process process = Runtime.getRuntime().exec("logcat");
InputStream is = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while((line = br.readLine())!=null){
if(line.contains("I/ActivityManager")){
fos.write(line.getBytes());
fos.flush();
}
}
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
};
}.start();
}
然后压力测试,发现Android开启logcat程序抓到的log和adb logcat抓到的log,有概率不一样。(大概测试200次,会有1次不一样)
不一样的地方是:同一时间点,hal代码里打印的log不一样。(说一下hal代码里干的事儿,hal会去读芯片回复的数据,然后打印出来)
第一张图是正常的:Android抓到的log和adb抓到log是一样的
下面这张图是异常的:Android抓到的log和adb抓到log不一样
我尝试了以下方法仍然没有解决问题
1、如果是因为手机的log缓存不够,导致丢log,执行如下2条命令,问题依然存在。(验证后感觉不是丢log的问题,因为adb logcat里的log是正常的)
setprop persist.logd.size 16777216
logcat -G 16M
2、分析过hal的代码,如果hal没有读到芯片回复的数据,会打印别的log;否则打印收到的数据。但这应该不是导致“Android开启logcat程序抓到的log和adb logcat抓到的log”不一样的原因吧