2017-04-21 68 views
-3

我希望我的应用程序始终处于联机状态。为此,我在服务中实现一个线程,线程每5秒钟检查一次互联网。那么做到这一点的最好方法是什么?我希望我的代码能够始终在后台运行,并且在资源上很容易。我尝试了一个服务内的线程,但它使我的设备滞后。每隔几秒钟检查一次互联网连接的最佳方式是什么?

public Boolean isOnline() { 
try { 
    Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com"); 
    int returnVal = p1.waitFor(); 
    boolean reachable = (returnVal==0); 
    return reachable; 
} catch (Exception e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
return false; 
} 
+0

我没有看到向下投票的理由。您还需要在投票前提供一个理由。 – user7892106

+3

我不是其中一个倒下的选民,但你的评论是错误的。投票前你不必提供一个理由。我会认为它很好,但它绝对不是强制性的。 – jotasi

+1

你不应该在这里提出基于意见的问题。这是downvote的原因。每种方法都没有共同的*最佳*分数,只有方法,这对于**某人的意见**是最好的。 –

回答

0

每隔几秒钟

无。合并是坏了。你得到了ConnectivityManager,它提供回调以获知有关网络状态变化的信息。

+0

我知道它的确如此。但它只检查互联网连接。不适用于互联网连接。两个术语都不同,不应该混淆。 – user7892106

+0

任何池塘通常都不好。如果在ConnectivityManager发生更改**时可以通知**,则没有任何益处。 –

-1

您可以使用此代码

public boolean isInternetAvailable() { 
    try { 
     InetAddress ipAddr = InetAddress.getByName("google.com"); //You can replace it with your name 
     return !ipAddr.equals(""); 

    } catch (Exception e) { 
     return false; 
    } 

} 

click here更多细节

如何使用:

if (isInternetAvailable()){ 
     // ... put your code here 
}else{ 
     // ... put your code here 
} 
+0

您如何从代码中获得结果?我想用其他方法 – user7892106