2
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 文件时,我看到最后一行已添加。我有什么错?

我需要启动流,关闭此活动并参观其他活动,然后返回并关闭伐木机。

4

2 回答 2

3

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

公共抽象无效销毁()

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

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

private Process p;

并在执行时

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

这就是它停止的方式。

void stopProcess() {
     if (p != null) {
         p.destroy();
     } else {
         Log.d(TAG, "stopProcess: p==null");
     }
}
于 2015-05-20T16:27:17.170 回答
1

只需使用 @hegazy 方法并在Application类中保存对进程的引用。不要忘记在您的清单中注册它。希望你有我的想法。

像这样的东西:

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

而不是在需要时使用它:

((App)getApplicationContext).process.exec("logcat -d");
于 2015-05-20T17:05:40.757 回答