最近做一个即时通讯的app,由于即时要和服务器进行保持连接,发送请求. 遇到悲催的问题 小米的alarmanager 失效 而用handler 来轮询,又发生在休眠的时候cpu停止,hanlder就挂掉了, 首先第一个方法 alarmanager 在别的手机上都可以用,就TMD的在小米手机上不能用,因为小米把api给改了,限制cpu的访问,为了提高省电,fuck, 没有别的办法了,只能从第二种方法入手,利用hanlder来保持连接,cpu停止后hanlder挂掉,想想可以从cpu入手,不让cpu挂掉,由于android有权限拿到cpu的唤醒锁机制,让cpu保持唤醒状态当不要的时候释放cpu即可,关键代码
/** * 保持该服务在屏幕熄灭时仍然获取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(); } } }
/** 释放掉cpu */
private void releaseWakeLock() {
if (null != wakeLock && wakeLock.isHeld()) {
wakeLock.release();
wakeLock = null;
}
}