2017-04-21 12 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

私はダウン投票者の1人ではありませんが、あなたのコメントは偽です。あなたは投票の前に理由を提示してはいけません。私はそれがいいと思うだろうが、それは間違いなく義務ではない。 – jotasi

+1

ここで意見に基づく質問をするべきではありません。これがダウンボートの理由です。各方法の共通点*ベストスコア*はありません。メソッドがあります。これは、誰かの意見**に最適です。 –

答えて

0

数秒ごとに

なし。プールはBADです。ネットワーク状況の変更について通知されるコールバックを提供するConnectivityManagerがあります。

+0

私はそれが知っています。しかし、インターネット接続のみをチェックします。インターネット接続用ではありません。両方の用語は異なっており、混乱させるべきではありません。 – user7892106

+0

通常、プーリングは悪いです。 ConnectionManagerによって変更が発生したとき**あなたが通知を受けることができるときに投票を行うことによるメリットはありません –

-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

関連する問題