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");