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

How to stop a currently executing command

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 并参观其他活动,然后回来关闭日志机器。

是的,您可以通过将进程保存在运行时的 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");
     }
}

只需使用@hegazy 方法并在清单中的 Application class. Don't forget to register 中保存对进程的引用。希望你能理解我的想法。

类似的东西:

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

然后在需要时使用它:

((App)getApplicationContext).process.exec("logcat -d");