gpt4 book ai didi

java - 如何在 Android 应用程序中获取 logcat -v 时间?

转载 作者:行者123 更新时间:2023-12-01 19:30:04 24 4
gpt4 key购买 nike

我需要从设备获取 logcat -v 时间并将其保存到 SD 卡中的文本文件中。问题是,当我按下按钮时,我的应用程序卡住了。

我知道这可能会发生,因为 logcat -v time 不断获取设备所有操作的日志,不间断。我需要所有这些信息。但我不知道如何正确编码。请问有人可以帮助我吗?

提前致谢!

这是我的代码:

btn_comeca.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
Process process = Runtime.getRuntime().exec("logcat -v");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

StringBuilder log=new StringBuilder();
String line = "";
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
}

try {

if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {
//Verifica permissão de gravar/ler
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {

} else {

ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MODE_ENABLE_WRITE_AHEAD_LOGGING);
}
}
File caminho_arquivo = new File("/sdcard/ARQUIVOFINAL.txt");
caminho_arquivo.createNewFile();
FileOutputStream fileOutputStream = new FileOutputStream(caminho_arquivo);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
TextView tv = (TextView)findViewById(R.id.texttext);
String texto = "";
//tv.setText(log.toString());
texto = log.toString();
//outputStreamWriter.append(tv.getText());
outputStreamWriter.append(texto);
outputStreamWriter.close();
fileOutputStream.close();
Toast.makeText(getBaseContext(), "Text File Saved!", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
}

}
catch (IOException e) {}
}

最佳答案

问题可能是:您的逻辑同步工作。您永远不应该在主线程中执行类似的工作,因为它可能会导致 ANR(Android 无响应)。

不过,有很多方法可以解决这个问题。由于您没有使用多线程框架(例如 RxJava,如果您感兴趣,可以阅读它),因此可以使用 AsyncTask。您可以将其放置在监听器中。

编辑:不过,稍后再看看 MVVM 或 MVP 模式和多线程框架。这些东西广泛用于生产中执行不同类型的异步任务。

new AsyncTask<Void, Void, Void>(){
@Override
protected Void doInBackground(Void... params) {
// Place your logic here
return;
}
}.execute();

关于java - 如何在 Android 应用程序中获取 logcat -v 时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59266475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com