在Android Java

时间:2017-06-27 19:14:59

标签: java android android-asynctask ping runtime.exec

我正在尝试将Ping实用程序实现为Android中的AsyncTask。以下基本上是我的doInBackground函数。

mProcess = Runtime.getRuntime().exec("/system/bin/ping -c 6 " + url );
    try {
        InputStream in = mProcess.getInputStream();
        OutputStream out = mProcess.getOutputStream();
        byte[] buffer = new byte[ 1024 ];
        int count;

        while( ( count = in.read( buffer ) ) != -1 ){
            mPOut.write( buffer, 0, count );
            publishProgress();
            Log.d("PING TASK", "PING.... PING....");
            if( isCancelled() ) {
                return null;
            }
        }

        out.close();
        in.close();
        mPOut.close();
        mPIn.close();
    } finally {
        mProcess.destroy();
        mProcess = null;
        Log.d("PING TASK", "DONE");
    }
} catch( IOException e ) {
    Log.d("PING TASK", e.getMessage());
}
return null;

它按预期工作,但仅当我ping一个响应的地址时,例如android.com8.8.8.8。但是,如果我ping一个没有响应的地址,如intel.comlalalalalalalaandroid.com(我还没有完全检查过那个),那就不行了。

如果我在自己的电脑上执行ping -c 6 intel.com,我至少会获得第一行PING intel.com (13.91.95.74) 56(84) bytes of data.Ping request could not find host lalalalalalalaandroid.com Please check the name and try again.

但是我的申请表中没有这些......我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

根据文档,AsyncTasks只能执行一次。尝试在计时器运行中重新初始化它。

public void InitializeTimerTask() {
    timerPingTask = new timerPingTask() {
        public void run() {
            handler.post(new Runnable() {
                public void run() {
                    new PingAsyncTask().execute();
                }
            });
        }