延迟服务操作,直到网络连接可用

时间:2011-09-10 19:29:02

标签: android service

在我的应用程序中,我想提供一个动作,该动作将定期在后台执行。所以我使用AlarmManager,它启动一个IntentService。

棘手的部分是,此后台操作需要Internet连接。所以当设备被锁定时,我尝试使用一个似乎没有强制连接的WakeLock。

然后我考虑在服务启动时注册BroadcastReceiver来监听“android.net.conn.CONNECTIVITY_CHANGE”,并在收到所需的广播后立即取消注册。

我的代码看起来像这样:

public class BackgroundService extends IntentService {
    private static final IntentFilter filter =
        new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
    private static NetworkStateChangedReceiver receiver =
        new NetworkStateChangedReceiver();

    protected void onHandleIntent(Intent intent) {
        registerReceiver(receiver, filter);
    }
}

我现在的问题是:一旦服务停止,这个接收器是否会被销毁(因为它没有任何关系,只要没有连接可用)? 因此,我怎样才能实现一项服务,在网络连接可用之前延迟它的工作?

感谢。

1 个答案:

答案 0 :(得分:1)

  

一旦服务停止,这个接收器是否会被销毁(因为它没有任何关系,只要没有连接可用)?

是。它会活几微秒。

  

因此,我怎样才能实现一项服务,在网络连接可用之前延迟工作?

使用ConnectivityManagergetActiveNetworkInfo(),查看是否有连接,如果没有,只需退出onHandleIntent()并等待下一次警报。

或者,在清单中注册您的CONNECTIVITY_ACTION接收器并使用它来安排和取消您的警报,这样警报只有在连接时才会激活。

还有其他各种策略,但这两种策略应该给你一个起点。