Как остановить процесс, запущенный run.exec() в Android

#android

#Android

Вопрос:

Как остановить «пинг»? Следующий код — это способ, которым я пытаюсь, но он терпит неудачу.

 private class pingWifi implements Runnable {
           Process p = null;
    @Override
    public void run() {
        // TODO Auto-generated method stub
        /*
         * WifiInfo info=mWifiManager.getConnectionInfo(); int
         * ip=info.getIpAddress(); String ips=Formatter.formatIpAddress(ip);
         */
        System.out.println("pingWifi runnable");
        String[] shell = new String[] { "/system/bin/sh", "-c", " " };
        Runtime run = Runtime.getRuntime();

        shell[2] = "ping "   ipAddress;
        try {
            p = run.exec(shell);
            if (p.waitFor() != 0) {
                if (p.exitValue() == 1) {
                    byte[] buff = new byte[1024];
                    InputStream is = p.getErrorStream();
                    int c;
                    c = is.read(buff, 0, 1024);
                    System.out.println("ping error: "   new String(buff));
                }
            } else {
                byte[] buff = new byte[1024];
                InputStream is = p.getInputStream();
                int c;
                c = is.read(buff, 0, 1024);
                System.out.println("ping result: "   new String(buff));
                // wait for hardware
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

    }
void stopProcess() {
        if (p != null) {
            p.destroy();
        }else{
            System.out.println("stopProcess: p==null");
        }
    }



    }
private pingWifi mpingWifi = new pingWifi();
    Thread wifiThread = new Thread(mpingWifi);
            wifiThread.start();
 

В onPause я вызываю mpingWifi.stopProcess(), результатом является «stopProcess: p == null». И я все еще могу найти процесс ping в списке «ps».

Я также думаю использовать команду «pkill ping». но команда «pkill» не поддерживается в оболочке Android.Моя цель — пинг не «останавливается» до тех пор, пока не произойдет ключевое событие «home или back». Спасибо!

Ответ №1:

Попробуйте переопределить нажатие кнопки «Назад» и вызвать в нем Process.destroy().

Пример:

 public void onBackPressed() {
p.destroy();
}
 

Комментарии:

1. @kioboar Спасибо за ваш ответ. что такое p?

2. Но я получаю «значение p равно нулю». Я думаю, что «ping 192.168.11.3» этот процесс всегда выполняется и не возвращает его точку в p . Итак, p равно нулю. Правильно ли это?

3. Где вы получаете значение p равно нулю? Успешно ли выполняется «p = run.exec (shell); «?

4. Я обновил свой вопрос. Вы можете проверить это еще раз. Спасибо. 🙂

5. @Judy Хм, я вижу, ты используешь ping -t. Но -t требует аргумента, но вы не предоставили никаких аргументов после -t . Кроме того, в Android есть команда kill вместо pkill, но я думаю, вам нужно быть root, чтобы вызвать kill при ping.