我正在尝试将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.com
或8.8.8.8
。但是,如果我ping一个没有响应的地址,如intel.com
或lalalalalalalaandroid.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.
。
但是我的申请表中没有这些......我在这里缺少什么?
答案 0 :(得分:0)
根据文档,AsyncTasks只能执行一次。尝试在计时器运行中重新初始化它。
public void InitializeTimerTask() {
timerPingTask = new timerPingTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
new PingAsyncTask().execute();
}
});
}