Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠,可以被用户态程序和内核获得. 这个锁可以是有超时的或者是没有超时的,超时的锁会在时间过去以后自动解锁. 如果没有锁了或者超时了, 内核就会启动休眠的那套机制来进入休眠.Android 提供了现成 android.os.PowerManager 类 ,类中提供 newWakeLock(int flags, String tag)方法来取得相应
层次的锁, 此函数的定义frameworks/base/core/java/android/os/PowerManager.java 下面,应用程序在申请wake_lock时都会有调用。
代码:
服务启动时调用:
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, “My Tag”);
wl.acquire();//申请锁这个里面会调用PowerManagerService里面acquireWakeLock()
服务退出时调用
wl.release(); //释放锁,显示的释放,如果申请的锁不在此释放系统就不会进入休眠。
特别地,对于媒体播放service,可以简单调用mPlayer.setWakeMode(getApplicationContext(),PowerManager.PARTIAL_WAKE_LOCK);来获得WAKE_LOCK,mediaplayer对象销毁时自动释放WAKE_LOCK。