在Android中优雅地杀死Java打开的进程
我试图在我的Android应用程序中执行ping命令,并能够取消它/发送中断信号。基本上,我希望在任何普通linux中发送ctrl+c到ping之后获得ping统计数据。 我读过,但它的目标是Windows平台和tbh似乎有点像一个过火。我执行命令的代码(我使用的是rxjava):在Android中优雅地杀死Java打开的进程,java,android,rx-java,ping,rx-android,Java,Android,Rx Java,Ping,Rx Android,我试图在我的Android应用程序中执行ping命令,并能够取消它/发送中断信号。基本上,我希望在任何普通linux中发送ctrl+c到ping之后获得ping统计数据。 我读过,但它的目标是Windows平台和tbh似乎有点像一个过火。我执行命令的代码(我使用的是rxjava): 公共接收。可观察的getPingOutput(字符串地址) { 返回rx.Observable.create(新的rx.Observable.OnSubscribe() { @凌驾 public void call(
公共接收。可观察的getPingOutput(字符串地址)
{
返回rx.Observable.create(新的rx.Observable.OnSubscribe()
{
@凌驾
public void call(订户问题解决了,结果它对信号没有反应,因为我在单独的线程上运行了ping
public rx.Observable<String> getPingOutput(String address)
{
return rx.Observable.create(new rx.Observable.OnSubscribe<String>()
{
@Override
public void call(Subscriber<? super String> subscriber)
{
try
{
process = Runtime.getRuntime().exec("ping -c 4 " + address);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
String s;
while ((s = stdInput.readLine()) != null)
{
subscriber.onNext(s);
}
subscriber.onCompleted();
process.destroy();
stdInput.close();
}
catch (IOException e)
{
subscriber.onError(e);
if(process != null)
{
process.destroy();
}
}
}
});
}
RxView.clicks(pingButton)
.subscribe(new Action1<Void>()
{
@Override
public void call(Void aVoid)
{
if (isPingInProgress())
{
process.destroy();
subscription.unsubscribe();
isPing = false;
pingButton.setText("Ping");
}
else
{
if(adapter!= null)
{
adapter.clear();
adapter.notifyDataSetChanged();
}
String address = addressInput.getText().toString();
subscription = getPingOutput(address)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(myObserver);
isPing = true;
pingButton.setText("Stop");
}
}
});