在我的应用程序,我想提供一个动作,这将在后台定期执行。所以我使用AlarmManager,它启动一个IntentService。延时服务动作,直到网络连接可用
棘手的部分是,这样的背景下行动需要互联网连接。所以我试着用一个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);
}
}
我的问题是现在:请问这个接收器被破坏,只要该服务停止(因为它没有任何关系,只要没有连接可用)? 因此,如何才能实现一项服务,延迟它的工作,直到网络连接可用?
谢谢。
所以我能做的最好的,是遍地启动任务,直到建立连接? –
@cypressious:这是一种方法。我概述了两个,其中一个不符合该描述。 – CommonsWare
我明白了。你的第二个建议是注册一个永久的BroadcastReceiver。就我而言,任务应该每天执行1-2次。这是不是坏风格,每隔5分钟处理一次广播,忽略其中95%? –