我需要实现的功能是: 启动一个service service每个一定的时间会发送一条广播, 现在的情况是, 如果我没有锁屏 在正常状态下, 定时任务不会有延迟, 指定2秒就是2秒, 但是一旦进入锁屏状态, 每次的间隔时间就很不稳定, 有时候可能2 3 秒就会广播一次, 有时候会几十秒才广播一次, 请问我应该怎么做才能使它在锁屏状态下也能准时地发送广播呢?
我查了一下, 使用acquireWakeLock里面的这个方法的话, 能保证一直运行, 但是耗电量会剧增, 请问有什么好的办法能解决这些问题呢? 就好像QQ能及时收到信息的推送但是又不会大量增加耗电, 这样是怎么做到的呢? 查了不少资料, 大多讲的都是这个方法。。。 希望各位大牛帮忙。。 谢谢哈
下面是我service中的代码,
public class BgService extends Service {
private PowerManager.WakeLock mWakeLock;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
acquireWakeLock();
Timer timer = new Timer();
timer.schedule(new UdpSend(), 0, 2 * 1000);
}
private void acquireWakeLock()
{
if (null == mWakeLock)
{
PowerManager pm = (PowerManager)this.getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK| PowerManager.ON_AFTER_RELEASE,"");
if (null != mWakeLock)
{
mWakeLock.acquire();
}
}
}
@Override
public void onDestroy() {
if (null != mWakeLock)
{
mWakeLock.release();
mWakeLock = null;
}
super.onDestroy();
}
------解决思路----------------------
2秒一次太频繁了把,这样只能要求手机不睡眠了,耗电会很大。是不是可以延长间隔,比如延长到5分钟一次,然后通过设置alarm来唤醒,这样就不需要申请wakelock了。