当前位置: 代码迷 >> Android >> service靠山定时任务不准确
  详细解决方案

service靠山定时任务不准确

热度:91   发布时间:2016-04-28 00:54:58.0
service后台定时任务不准确
我需要实现的功能是: 启动一个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了。
  相关解决方案