一、App中实现dump方法
1.在Activity中添加dump信息(使用命令:dumpsys activity com.exa.companydemo.MainActivity)
@Override
public void dump(@NonNull String prefix, @Nullable FileDescriptor fd, @NonNull PrintWriter writer, @Nullable String[] args) {
super.dump(prefix, fd, writer, args);
writer.append("我添加的dump内容");
writer.flush();
}
2.在Service中添加dump信息(adb shell dumpsys activity service CarLocationService)
@Override
protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
LogUtil.info("CarLocationService dump");
try {
mLocationService.dump(fd, args);
} catch (Exception e) {
e.printStackTrace();
}
}
二、跨进程Binder联合打印dump
1.服务端Binder重写dump方法
@Override
public void dump(FileDescriptor fd, String[] args) {
PrintWriter pw = new PrintWriter(new FileOutputStream(fd));
try {
dumpInner(fd, pw, args);
} catch (Throwable e) {
pw.println("Exception occurred while dumping:");
e.printStackTrace(pw);
} finally {
pw.flush();
}
}
2.客户端:
private final ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mBinder = service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
mBinder = null;
}
};
/**
* 1.打印添加自己需要dump的信息
* 2.调用服务端dump——打印服务dump信息
*/
private void dump(FileDescriptor fd, PrintWriter pw, String[] args){
pw.append("客户端日志");
pw.flush();//如果不flush可能会与服务端的dump信息有交叉
if (mBinder != null) {
try {
mBinder.dump(fd, args);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}