如何停止当前正在执行的命令
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");
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");