cwac-wakeful与唤醒锁相撞

时间:2014-05-06 13:09:10

标签: android commonsware-cwac

我有一个非常奇怪的问题,一个cwac-wakeful库和唤醒锁。

在我的应用程序中,我正在使用cwac-wakeful定期从Web服务器下载数据,这非常有效。但是当我在应用程序的某个地方获得唤醒锁时(即使设置的警报被取消),cwac-wakeful开始表现得有点奇怪 - 它在整个小时开始完成每5分钟一次的工作(14:00,14:05)。 ..),无论设定重复间隔。

释放唤醒锁无效,解决此问题的唯一方法是完全重启应用程序。

我知道cwac-wakeful在执行工作时会利用唤醒锁,所以问题就在这里。

这是一个实现 AlarmListener

的类
public class ServiceWaker implements WakefulIntentService.AlarmListener
{
    private static final Logger log = Logger.getLogger(ServiceWaker.class);

    public ServiceWaker()
    {
        log.info("New ServiceWaker");
    }

    @Override
    public void scheduleAlarms(AlarmManager alarmManager, PendingIntent pendingIntent, Context context)
    {
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
        long syncFrequency = Long.parseLong(prefs.getString("sync_frequency", "1"));
        syncFrequency = syncFrequency * 60 * 1000;

        log.info("Alarm scheduled with a repeat interval:" + syncFrequency);

        alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                SystemClock.elapsedRealtime()+60000, syncFrequency, pendingIntent);
    }

    @Override
    public void sendWakefulWork(Context context)
    {
        log.info("Sent wakeful work");
        WakefulIntentService.sendWakefulWork(context, CheckServiceWakeful.class);
    }

    @Override
    public long getMaxAge()
    {
        return AlarmManager.INTERVAL_FIFTEEN_MINUTES*2;
    }
}

详细说明:

  • 目标SDK :17
  • 最低SDK :12
  • 编译SDK :17
  • BuildTools版本:19.0.3

1 个答案:

答案 0 :(得分:0)

迟到的回答但是在我找到解决方案之后我忘了发帖。

问题是我的手机中的能源经理。我有3个电池计划:

  • 节能 - 仅运行基本服务
  • 智能 - 通过使用唤醒锁进行一些优化来延长电池寿命,我已将此计划设置为激活
  • 正常 - 一切正常运行

“智能”计划负责此问题。正如我在某处读到的那样,当设置为活动状态时,系统会尝试批量唤醒锁定和网络任务,因此不会持续唤醒移动设备。因此,我的任务被重新安排了更长的时间,以便每次执行另一项任务 - 例如 - 15分钟。