【问题标题】:How can i handle the poor network connection in android application?我如何处理android应用程序中糟糕的网络连接?
【发布时间】:2013-11-08 13:23:35
【问题描述】:

在我的应用程序中完全依赖于网络,即,我从网络获取数据(带文本的图像)并仅显示在我的布局中。为此,我的主要问题是如何处理网络连接。我使用以下代码检查设备是否已连接到网络。

    public static boolean hasConnection() {
    ConnectivityManager cm = (ConnectivityManager) MbridgeApp.getContext().getSystemService(
        Context.CONNECTIVITY_SERVICE);

    NetworkInfo wifiNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    if (wifiNetwork != null && wifiNetwork.isConnected()) {
      return true;
    }

    NetworkInfo mobileNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    if (mobileNetwork != null && mobileNetwork.isConnected()) {
      return true;
    }

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (activeNetwork != null && activeNetwork.isConnected()) {
      return true;
    }

    return false;
  }
  1. 这段代码提供了有关设备是否连接到网络的信息。
  2. 我的问题会出现,有时网络连接了但信号强度太低,这种情况我的应用程序需要更多时间(从 API 获取数据),长时间后应用程序冻结或崩溃。
  3. 是否可以设置信号强度的最小范围,如果低于该范围,我只是将 toast 消息通知给用户。

【问题讨论】:

  • 见我的answer,也许它可以帮助你。

标签: android networking


【解决方案1】:

您可以为您的 http 调用设置超时,同时在单独的线程上使用它们,并在加载时显示一些进度以获得用户友好的用户界面。

编辑

您可以使用 AsyncTask 获取数据,无需检查连接,因为如果设备未连接,AsyncTask 将立即完成。

final ServerHit serverHit = new ServerHit(this);
serverHit.execute(url);
// set a timeout
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                if (serverHit.getStatus() == AsyncTask.Status.RUNNING)
                    serverHit.cancel(true);
            }
        }, timeout);

【讨论】:

  • 我正在为我的 api 调用使用 asyc 任务
  • 您可以使用带有 postDelayed 的处理程序来取消 AsyncTask。
  • 你可以使用缓存,意味着离线,请求失败,超过超时强制应用从缓存中读取
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 2018-11-19
相关资源
最近更新 更多