移动应用程序何时检查互联网连接

4
我希望了解在移动应用中检查互联网连接的推荐和最佳实践。
在我与团队合作开发的大多数应用程序中,我们会在需要互联网连接的任何操作之前检查互联网连接。但是,我注意到许多应用程序在设备断开互联网连接时通知用户。
我希望对这个话题有一个清晰的理解,我相信很多像我一样的开发者在开发应用程序时都犹豫不决如何正确地进行此项检查。
非常感谢您提供任何帮助或想法。

1
理想情况下,您的应用程序应该监控手机网络连接。您的应用程序可以选择是否对连接更改进行操作。对于iOS,您可以使用苹果提供的Reachability示例代码来监视网络连接。 - Amar
3个回答

3
你可以使用广播接收器来处理WiFi变化。
接收器代码:
private BroadcastReceiver WifiStateChangedReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

        int extraWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
                WifiManager.WIFI_STATE_UNKNOWN);

        switch (extraWifiState) {
            case WifiManager.WIFI_STATE_DISABLED: {
                handler.sendEmptyMessage(DATA_DISCONNECTED);
            }
            break;
            case WifiManager.WIFI_STATE_DISABLING: {
            }
            break;
            case WifiManager.WIFI_STATE_ENABLED: {
                handler.sendEmptyMessage(DATA_CONNECTED);
            }
            break;
            case WifiManager.WIFI_STATE_ENABLING: {
            }
            break;
            case WifiManager.WIFI_STATE_UNKNOWN: {
            }
            break;
        }
    }
};

注册接收器:

this.registerReceiver(this.WifiStateChangedReceiver,
            new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION));

您可以使用TelephonyManager来检查移动数据连接的变化:

PhoneStateListener pslCell = new PhoneStateListener() {
        @Override
        public void onDataConnectionStateChanged(int state) {
            switch (state) {
                case TelephonyManager.DATA_DISCONNECTED: {
                    handler.sendEmptyMessage(DATA_DISCONNECTED);
                }
                break;
                case TelephonyManager.DATA_SUSPENDED: {
                    handler.sendEmptyMessage(DATA_CONNECTED);
                }
                break;
            }
        }
    };

    telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    telephonyManager.listen(pslCell, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);

我建议您将网络状态存储在静态变量中。此外,您需要在每次应用程序启动时检查网络状态。

2

这与我们正在进行的项目有关。 如果您仅需要在执行任何操作时连接互联网的应用程序,则在执行操作之前检查互联网连接更好,这将消除每次检查互联网连接的开销。 我更喜欢这种方法。

但是,如果我们真的需要每次完全的网络连接,例如需要加载最新新闻或聊天应用程序,我们需要在每次通知时使用每个移动平台的适当连接 API。 Android 为此提供了 Connection BroadCast Recivers。


1
这完全取决于您的应用程序要求,以及您的应用程序是什么类型。
有时:
1)在需要网络连接的任何操作之前,我们必须检查网络连接。
2)我们会在一些特定定义的时间间隔后定期检查网络连接。
3)我们需要立即响应网络连接状态,因此我们的应用程序不断检查它,并立即向我们发送互联网失败或成功的通知状态,以便我们能够在这种情况下处理我们的应用程序。
希望对您有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接