【发布时间】:2016-10-13 21:41:28
【问题描述】:
我必须开发一个简单的应用程序,每 5 秒从服务器获取一个 json。我知道这会耗尽电池电量,但由于我无法控制服务器,这是我目前唯一的解决方案,所以请和我在一起。 (这是一个演示应用,最终版本会完全不同)
我做了什么:
我创建了一个 IntentService 并在他的 onHandleIntent 中执行 http 请求并异步管理响应。阅读文档,IntentService 优于服务。最后,如其他主题中所见,我使用 AlarmManager 类重新创建 intentService。方法是这样的:
private void repeat() {
lastTrigger = System.currentTimeMillis();
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent serviceIntent = new Intent(this, StatusPollingService.class);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, serviceIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP, lastTrigger + UPDATE_INTERVAL, pendingIntent);
}
在我的第一个 Activity 中的 onCreate 中,我只需启动服务:
serviceIntent = new Intent(BaseActivity.this, StatusPollingService.class);
startService(serviceIntent);
我的问题:
- 当我关闭应用程序(使用后退按钮)时,intentService 会继续执行请求并重新创建自身(如预期的那样),因此我必须手动终止它
- 我想在我的应用每次进入后台时停止轮询,并在进入前台时重新启动,以限制电池消耗
我的其他问题:
我实现了一个类,当应用程序进入后台/前台时触发侦听器。我在 BaseActivity 和 IntentService 中实现了接口。当应用程序进入后台时,布尔值变为 false,我不执行 repeat() 方法。当我进入前台时,在我的方法 onBecameForeground 中我只是创建了服务:
serviceIntent = new Intent(BaseActivity.this, StatusPollingService.class);
@Override
public void onBecameForeground() {
startService(serviceIntent);
}
进入后台没有问题,但是进入前台会创建多个intentService,我在那一刻拥有的每个Activity都有一个intentService(我在日志中看到了)。
我的问题:
- 这是完成这项工作的最佳方式吗?我该如何解决这些问题?
- 如果这是最好的(或不太糟糕的)方法,我该如何创建 IntentService 的单个实例?
非常感谢您的帮助
【问题讨论】:
标签: android polling intentservice