Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中优雅地杀死Java打开的进程_Java_Android_Rx Java_Ping_Rx Android - Fatal编程技术网

在Android中优雅地杀死Java打开的进程

在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(

我试图在我的Android应用程序中执行ping命令,并能够取消它/发送中断信号。基本上,我希望在任何普通linux中发送ctrl+c到ping之后获得ping统计数据。 我读过,但它的目标是Windows平台和tbh似乎有点像一个过火。我执行命令的代码(我使用的是rxjava):

公共接收。可观察的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");
                        }
                    }
                });