最近作一个即时通信的app,因为即时要和服务器进行保持链接,发送请求. 遇到悲催的问题 小米的alarmanager 失效 而用handler 来轮询,又发生在休眠的时候cpu中止,hanlder就挂掉了, 首先第一个方法 alarmanager 在别的手机上均可以用,就TMD的在小米手机上不能用,由于小米把api给改了,限制cpu的访问,为了提升省电,fuck, 没有别的办法了,只能从第二种方法入手,利用hanlder来保持链接,cpu中止后hanlder挂掉,想一想能够从cpu入手,不让cpu挂掉,因为android有权限拿到cpu的唤醒锁机制,让cpu保持唤醒状态当不要的时候释放cpu便可,关键代码android
/** * 保持该服务在屏幕熄灭时仍然获取CPU时,保持运行 */ private void acquireWakeLock() { if (null == wakeLock) { PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, getClass() .getCanonicalName()); if (null != wakeLock) { System.out.println("000000000000000"+"保持运行"); wakeLock.acquire(); } } }api
/** 释放掉cpu */服务器
private void releaseWakeLock() { if (null != wakeLock && wakeLock.isHeld()) { wakeLock.release(); wakeLock = null; } }