在我的应用程序中,我想提供一个动作,该动作将定期在后台执行。所以我使用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);
}
}
我现在的问题是:一旦服务停止,这个接收器是否会被销毁(因为它没有任何关系,只要没有连接可用)? 因此,我怎样才能实现一项服务,在网络连接可用之前延迟它的工作?
感谢。
答案 0 :(得分:1)
一旦服务停止,这个接收器是否会被销毁(因为它没有任何关系,只要没有连接可用)?
是。它会活几微秒。
因此,我怎样才能实现一项服务,在网络连接可用之前延迟工作?
使用ConnectivityManager
和getActiveNetworkInfo()
,查看是否有连接,如果没有,只需退出onHandleIntent()
并等待下一次警报。
或者,在清单中注册您的CONNECTIVITY_ACTION
接收器并使用它来安排和取消您的警报,这样警报只有在连接时才会激活。
还有其他各种策略,但这两种策略应该给你一个起点。