android - 如何停止当前正在执行的命令

标签 android android-logcat android-runtime java-threads

int count = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    setContentView(R.layout.main);

    Button start = (Button) findViewById(R.id.start);

    start.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {

                    try {

                        String[] cmd = new String[] { "logcat", "-f",Environment.getExternalStorageDirectory()+"/log.txt", "-v", "time" };
                        Runtime.getRuntime().exec(cmd);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                }
            });

            thread.start();

        }
    });

    Button stop = (Button) findViewById(R.id.stop);

    stop.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            try {
                Runtime.getRuntime().exec("logcat -d");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


        }
    });

    Button addLog = (Button) findViewById(R.id.addLog);

    addLog.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            Log.e("logTag", Integer.toString(count));
            count ++ ;

        }
    });
}

我想使用 start 按钮开始保存应用日志,并使用 stop 停止它。 addLog 按钮用于查看是否有更多行添加到 log.txt 文件中。 start 按钮工作正常,但问题是它永远不会以 stop 结束。 即使在按下 stop 后,当我按下 addLog 按钮并检查 log.txt 文件中,我看到最后几行已添加。 我有什么错?

我需要启动流,关闭此 Activity 并浏览其他 Activity ,然后返回并关闭日志记录机。

最佳答案

是的,您可以通过将 Process 保存在运行时的 exec() 方法返回的变量中并对该变量调用 destroy() 来实现这一点。

public abstract void destroy ()

Terminates this process and closes any associated streams.

让我们将 Process 记录为全局变量;

private Process p;

以及执行时

p = Runtime.getRuntime().exec(cmd);

这就是它的停止方式。

void stopProcess() {
     if (p != null) {
         p.destroy();
     } else {
         Log.d(TAG, "stopProcess: p==null");
     }
}

关于android - 如何停止当前正在执行的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30355197/

相关文章:

android - 使用 Firebase 对 ArrayList 进行排序

java - Android 应用程序在四个特定 Activity 中崩溃

Android - ART/Dalvik 类验证失败

android - ADB Logcat 时间戳如何工作

android - 覆盖安卓 :vmSafeMode attribute for debug builds

java - 带有导入库的 Android Studio java.lang.NoSuchMethodError

android - Google Play 分阶段部署分发组

android - android 有垃圾收集功能吗?它有多快?

java - 我需要帮助在另一种方法完成后立即启动一种方法,而不是在它完成期间

java - @override 错误显示在 .xml 文件中