关闭

Android WifiLock 和 WakeLock

114人阅读 评论(0) 收藏 举报
分类:

WifiLock

Android 对 WiFi 电源管理的代码主要在 WifiService.java 中。如果应用程序想在屏幕被关掉后继续使用 WiFi 则可以调用 acquireWifiLock 来锁住 WiFi,该操作会阻止 WiFi 进入睡眠状态。当应用程序不再使用 WiFi 时需要调用 releaseWifiLock 来释放 WiFi。之后WiFi可以进入睡眠状态以节省电源。

默认情况下当屏幕被关掉以后,如果没有应用程序在使用 WiFi,WiFi 会在2分钟后进入睡眠状态。这主要是为防止频繁地改变 WiFi 的电源模式。

private static void acquireWifiLock(Context ctx) {
    if (sWifiLock == null) {
        WifiManager wMgr = (WifiManager) ctx.getSystemService(WIFI_SERVICE);
        sWifiLock = wMgr.createWifiLock("ThisService#WifiLock");
    }
    sWifiLock.acquire();
}

private static void releaseWifiLock() {
    if (sWifiLock != null) {
        sWifiLock.release();
    }
}

WakeLock

WakeLock 是一种锁的机制,只要有人拿着这个锁,系统就无法进入休眠。可以被用户态程序和内核获得。锁分为有超时的或者是没有超时的,超时的锁会在时间过去以后自动解锁。如果没有锁了或者超时了,内核就会启动休眠的那套机制来进入休眠。

创建了 PowerManager.WakeLock 有两种机制,第一种是不计数锁机制,另一种是计数锁机制。可以通过 setReferenceCounted(boolean value) 来指定,一般默认为计数机制。

区别在于:
1)前者无论 acquire() 了多少次,只要通过一次 release() 即可解锁。
2)后者正真解锁是在 (–count == 0) 的时候,同样当 (count == 0) 的时候才会去申请加锁,其他情况 isHeld 状态是不会改变的。

所以 PowerManager.WakeLock 的计数机制并不是正真意义上的对每次请求进行申请/释放每一把锁,它只是对同一把锁被申请/释放的次数进行了统计再正真意义上的去操作。

private static void acquireWakeLock(Context ctx) {
    if (sWakeLock == null) {
        PowerManager pMgr = (PowerManager) ctx.getSystemService(POWER_SERVICE);
        sWakeLock = pMgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "ThisService#wakelock.");
    }
    sWakeLock.acquire();
}

private static void releaseWakeLock() {
    if (sWakeLock != null) {
        sWakeLock.release();
    }
}
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

安卓系统耗电太快?针对wakelock(唤醒锁)的设置优化教程

导读: android为了确保应用程序的正确执行,提供了wakelock(唤醒锁)的api,wakelock是一种锁的机制,只要有应用拿着这个锁,系统就无法进入休眠,手机耗电的问题,其实大部分是这个锁...
  • rongwenbin
  • rongwenbin
  • 2015-10-29 11:33
  • 7460

使用WakeLock使Android应用程序保持后台唤醒

在使用一些产品列如微信、QQ之类的,如果有新消息来时,手机屏幕即使在锁屏状态下也会亮起并提示声音,这时用户就知道有新消息来临了。但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗...
  • vurtne_ye
  • vurtne_ye
  • 2014-01-25 15:31
  • 2317

Android提高篇之-WakeLock应用与问题排查

本系列不讲如何使用wakelock,具体用法可以Google之。 wakelock申请忘记释放会造成手机耗电太快,严重影响用户体验,用户知道骂娘,厂商知道骂开发煞笔。废话说多了,进入正题。 我们现在...
  • HMC20071120015
  • HMC20071120015
  • 2014-03-03 23:19
  • 3269

Android Wifi锁之WifiLock

Android Wifi锁之WifiLock有的时候我们需要app在手机后台运行,但是会遇到手机一旦息屏或者断网,app无法正常运行的情况,android锁屏后wifi不活跃的解决方案 1. 今天在看...
  • fenggit
  • fenggit
  • 2015-08-05 13:18
  • 4210

Android wakelock 自上而下浅析

Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠,可以被用户态程序和内核获得. 这个锁可以是有超时的或者是没有超时的,超时的锁会在时间过去以后自动解锁. 如果没有锁了或者超时...
  • crycheng
  • crycheng
  • 2012-07-31 16:42
  • 1869

Android应用程序 --- WakeLock 保持后台唤醒状态

一些手机app(如微信、QQ等)有新消息来到达,手机屏幕即使在锁屏状态下也会亮起,并提示用户有新消息。但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使系统进入...
  • andyhuabing
  • andyhuabing
  • 2013-05-29 10:28
  • 24896

Android应用程序 --- WakeLock 保持后台唤醒状态

一些手机app(如微信、QQ等)有新消息来到达,手机屏幕即使在锁屏状态下也会亮起,并提示用户有新消息。但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使系统进入...
  • Gold_brick
  • Gold_brick
  • 2017-04-19 18:24
  • 709

关于电源锁:android之WakeLock机制浅析

http://blog.sina.com.cn/s/blog_4ad7c2540101n2k2.html 项目中数据传输时因为手机休眠而罢工了,这里简单了解了一下电源锁。 android之Wa...
  • UESTCAA
  • UESTCAA
  • 2016-03-01 12:14
  • 382

Android提高篇之-WakeLock应用与问题排查

本系列不讲如何使用wakelock,具体用法可以Google之。 wakelock申请忘记释放会造成手机耗电太快,严重影响用户体验,用户知道骂娘,厂商知道骂开发煞笔。废话说多了,进入正题。 我们现在...
  • HMC20071120015
  • HMC20071120015
  • 2014-03-03 23:19
  • 3269

android之WakeLock机制浅析

android之WakeLock机制浅析   转载▼ 应用程序耗电的实质,是所启用的硬件在消耗电量。   手机的耗电单元  CPU: 应用处理器(Applicat...
  • esfly
  • esfly
  • 2016-10-08 11:14
  • 213
    个人资料
    • 访问:1281次
    • 积分:283
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:5篇
    • 译文:0篇
    • 评论:5条
    文章分类
    文章存档
    最新评论