代码之家  ›  专栏  ›  技术社区  ›  Ricket

关于让Android服务轮询web服务来处理不良连接的技巧

  •  4
  • Ricket  · 技术社区  · 14 年前

    我正在开发一个Android应用程序,它需要在时间间隔内轮询特定的网页。我已经达到了这样的程度,它确实在一个特定的时间间隔上轮询页面,这个时间间隔是在一个SharedPreference中指定的,用户可以在应用程序的设置页面中更改它。但当网络连通性不稳定时,就会出现复杂情况。

    例如,如何确保服务“唤醒”网络适配器,并在轮询页面之前为其提供充足的连接时间,以防手机正在休眠以节省电源?这种轮询操作每24小时只可能发生一次,因此我不想因为网络中断而错过一次操作(但在几秒钟、几分钟甚至几小时后才打开)。

    或者有时web服务没有响应,或者DNS没有响应,或者你做了什么,不管什么原因,它都没有得到响应,即使技术上连接了电话。我应该制定什么样的规则来稍后重试,这样当用户明确关闭他们的互联网时,我就不会重复重试,但我重试的时间足够快,如果只是一个小插曲,那么在第一次尝试后数据可以很快收到?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Community Neeleshkumar S    7 年前

    倾听 CONNECTIVITY_ACTION

    这看起来不错 sample code . 下面是一个片段:

            IntentFilter filter = new IntentFilter();
            filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
            context.registerReceiver(mReceiver, filter);
    

    看看这个关于 How can we get notified if the phone has got internet access?

        2
  •  1
  •   robsf    13 年前

    http://hub.buzzbox.com/android-sdk/

    如果您将任务声明为网络任务,则在再次连接手机后,库将在出现错误时重试。 它使用的是广播接收器,你需要在清单中声明:

        <receiver android:name=".NetworkChangeReceiver"
            android:label="NetworkChangeReceiver">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
            </intent-filter>
        </receiver>