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

Android 如何停止当前正在执行的命令,android,android-logcat,android-runtime,java-threads,Android,Android Logcat,Android Runtime,Java Threads,我想使用start按钮开始保存我的应用程序日志,然后使用stop停止它。 addLog按钮用于查看是否有更多的行添加到log.txt文件中。 start按钮工作正常,但问题是它永远不会以stop结束。 即使在按下stop之后,当我按下addLog按钮并检查log.txt 文件,我看到最后一行已经添加。 什么是我的错 我需要启动流,关闭此活动,并在其他活动中浏览,然后返回并关闭日志记录计算机。是的,您可以通过将进程保存在运行时的exec()方法返回的变量中并对该变量调用destroy()来实现这一

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


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

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

公开摘要无效销毁()

终止此进程并关闭任何关联的 溪流

让我们把这个过程记录为一个全局变量

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 ++ ;

        }
    });
}
执行它的时候呢

private Process p;
这就是它停止的方式

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

只需使用@hegazy方法并将引用保存到类中的进程。别忘了把它放在你的舱单上。希望你明白我的意思

诸如此类:

void stopProcess() {
     if (p != null) {
         p.destroy();
     } else {
         Log.d(TAG, "stopProcess: p==null");
     }
}
而不是在你需要的时候拿着它:

((App)getApplicationContext).process = Runtime.getRuntime().exec(cmd);

非常感谢你。我知道它会起作用,但我有另一个问题,它阻止我使用你解释的方法。我需要启动流,关闭此活动,并在其他活动中游览,然后返回并关闭日志记录机。你能帮我吗@你能回答吗?对不起,我没空。你还有什么问题吗?谢谢,成功了。现在我有一个新问题。如果用户关闭我的应用程序,整个应用程序进程将被销毁,但日志记录机仍处于联机状态。然后,对
进程
对象的引用丢失,我无法在重新打开活动后停止流。你能帮我吗?这是另外一个问题。关闭这个,然后开始新的。别忘了把我的答案标为正确答案
((App)getApplicationContext).process.exec("logcat -d");