赞
踩
- PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
- WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
通过调用acquire()方法获取Wake Lock对象,并可以指定一个超时值timeout,在该timeout内保持使用该WakeLock。
- PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
- WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
- wakeLock.acquire(10000);//timeout = 10s
- // do something that require the CPU is active
- wakeLock.release();
当你完成了工作
通过调用release()方法释放WakeLock对象。
- WakeLock(int flags, String tag, String packageName) {
- mFlags = flags;
- mTag = tag;
- mPackageName = packageName;
- mToken = new Binder();
- mTraceName = "WakeLock (" + mTag + ")";
- }
WakeLock带timeout的acquire函数如下:
- public void acquire(long timeout) {
- synchronized (mToken) {
- acquireLocked();
- mHandler.postDelayed(mReleaser, timeout);
- }
- }
- private void acquireLocked() {
- if (!mRefCounted || mCount++ == 0) {
- mHandler.removeCallbacks(mReleaser);
- Trace.asyncTraceBegin(Trace.TRACE_TAG_POWER, mTraceName, 0);
- try {
- mService.acquireWakeLock(mToken, mFlags, mTag, mPackageName, mWorkSource,
- mHistoryTag);
- } catch (RemoteException e) {
- }
- mHeld = true;
- }
- }
WakeLock的释放release函数如下:
- public void release(int flags) {
- synchronized (mToken) {
- if (!mRefCounted || --mCount == 0) {
- mHandler.removeCallbacks(mReleaser);
- if (mHeld) {
- Trace.asyncTraceEnd(Trace.TRACE_TAG_POWER, mTraceName, 0);
- try {
- mService.releaseWakeLock(mToken, flags);
- } catch (RemoteException e) {
- }
- mHeld = false;
- }
- }
- if (mCount < 0) {
- throw new RuntimeException("WakeLock under-locked " + mTag);
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。