[Android] 脆弱なネットワークの検出例

ConnectivityManager クラスを使用して、現在のネットワーク状態と接続タイプを確認します。

次のコードを使用して、ネットワーク接続が現在利用可能かどうかを確認します。

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();

ConnectivityManager の getNetworkCapabilities() メソッドを使用して、現在のネットワーク機能を確認することもできます。たとえば、次のコードを使用して、現在のネットワークが高速ダウンロードをサポートしているかどうかを確認できます。

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkCapabilities nc = cm.getNetworkCapabilities(cm.getActiveNetwork());
if (nc.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
    
    
  // 这是一个蜂窝网络
  if (nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_LTE)) {
    
    
    // 快
  } else {
    
    
    // 慢
  }
}

Ping または Traceroute コマンドを使用してネットワーク品質を確認する

その後、Java の ProcessBuilder クラスを使用して Ping コマンドを実行できます。たとえば、次のコードを使用してwww.baidu.comに Ping を送信できます。

// ProcessBuilder pb = new ProcessBuilder("ping", "-c", "4", "www.baidu.com");
ProcessBuilder pb = new ProcessBuilder("traceroute", "-n", "www.baidu.com");
pb.redirectErrorStream(true);
Process process = pb.start();

// 读取命令的输出
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
    
    
  // todo:处理输出行
}

このコードはスレッドをブロックするため、アプリのメインスレッドの外側で実行する必要があることに注意してください。コルーチンまたはその他のメソッドを使用して、バックグラウンド スレッドで Ping/Traceroute コマンドを実行できます。

Ping コマンドを実行すると、出力からネットワークの品質に関する情報を抽出できます。たとえば、「time=」文字列を検索して、各 Ping リクエストの遅延をミリ秒単位で取得できます。「パケット損失」文字列を検索してパケット損失率を取得することもできます。

Traceroute コマンドを実行した後、出力からネットワーク パスに関する情報を抽出できます。たとえば、出力の各行には、ルーターの IP アドレスとミリ秒単位の遅延が含まれます。この情報を使用すると、データがネットワークを通過するパスと、そのパスに沿った遅延を理解できます。

最後に、Ping/Traceroute コマンドを使用したネットワーク測定は、ネットワークにわずかな負荷がかかり、場合によってはファイアウォールによってブロックされる可能性があることに注意してください。したがって、この方法は注意して使用する必要があります。

劣悪なネットワーク条件下で Android アプリケーションのパフォーマンスを最適化するには、次の点を考慮することができます。

  1. キャッシュを使用する: 頻繁に使用されるデータとリソースをキャッシュすると、ネットワーク接続がなくてもアプリが動作しやすくなります。Android が提供するキャッシュ API を使用することも、サードパーティのライブラリを使用してキャッシュを管理することもできます。
  2. オフライン モードを使用する: アプリがネットワーク接続に依存してコンテンツを配信している場合は、ユーザーがアプリをオフラインで利用できるようにすることを検討してください。これは、オンライン中にコンテンツをダウンロードし、オフラインで使用することで実現できます。
  3. バックグラウンド同期を使用する: アプリケーションがサーバーと定期的にデータを同期する必要がある場合は、Android のバックグラウンド同期メカニズムを使用して実現できます。これにより、ネットワーク状態が悪い場合でも、アプリはユーザー エクスペリエンスに影響を与えることなく、バックグラウンドでデータを自動的に同期できます。
  4. ネットワーク リクエストの最適化: ネットワークを使用してデータをロードするアプリケーションの場合は、ネットワーク リクエストの最適化を検討してください。これは、不要なリクエストを減らし、圧縮された転送を使用し、より高速なネットワーク接続を使用することで実現できます。
  5. データの使用量を減らす: アプリが使用するデータ量を最小限に抑えると、ネットワーク状態が悪い場合でもアプリのパフォーマンスが向上します。これは、イメージ サイズの最適化、キャッシュとオフライン モードの使用、不必要なデータ転送の削減によって実現できます。
  6. より高速なネットワーク接続を使用する: アプリでネットワークを使用する場合、より高速なネットワーク接続を使用すると、ネットワーク状態が悪い場合でもアプリのパフォーマンスが向上します。たとえば、モバイル データ接続の代わりに Wi-Fi を使用したり、複数の接続が利用可能な場合はより高速な接続を選択したりできます。
  7. ネットワーク状態監視を使用する: ネットワーク状態を監視することで、アプリケーションは現在のネットワーク状態に応じて動作を調整できます。たとえば、ネットワークの状態が悪い場合に通知を表示したり、ネットワークが利用できない場合に特定の機能を無効にしたりできます。
  8. 新しい Web テクノロジーを試す: 最新のモバイル デバイスやオペレーティング システムでは、多くの場合、より多くの Web 最適化機能が提供されます。たとえば、Android 11 では、ネットワーク状態が悪い場合でもアプリのパフォーマンスを向上させることができるネットワーク リクエスト最適化ツールが導入されています。

やっと

アーキテクトになりたい場合、または 20,000 ~ 30,000 の給与範囲を突破したい場合は、コーディングとビジネスに限定されず、モデルを選択し、拡張し、プログラミング的思考を向上させることができなければなりません。また、しっかりとしたキャリアプランも大切で、学ぶ習慣も大切ですが、一番大切なのは継続力であり、継続的に実行できないプランは絵にかいたもちです。

方向性がわからない場合は、Ali のシニア アーキテクトが書いた一連の「Android の 8 つの主要モジュールに関する上級ノート」をここで共有したいと思います。これは、乱雑で散在し断片化した知識を体系的に整理するのに役立ちます。 Android開発のさまざまな知識を体系的かつ効率的に習得できます。
ここに画像の説明を挿入
私たちが普段読んでいる断片的な内容と比べて、このノートの知識ポイントはより体系的で理解しやすく、覚えやすく、知識体系に従って厳密に配置されています。

ビデオ素材のフルセット:

1. インタビュー集

ここに画像の説明を挿入
2. ソースコード解析集
ここに画像の説明を挿入

3. オープン ソース フレームワークのコレクションは、
ここに画像の説明を挿入
ワン クリックと 3 つのリンクで誰でもサポートできるようになっています。記事内の情報が必要な場合は、記事の最後にある CSDN 公式認定 WeChat カードを直接スキャンして無料で入手してください↓↓↓

PS: グループには ChatGPT ロボットもおり、仕事や技術的な質問に答えることができます。

おすすめ

転載: blog.csdn.net/weixin_43440181/article/details/130989538