转载请注明原文地址:http://bcoder.com/java/make-the-app-keep-running-after-lock-screen
话不多说,先上代码:
首先在AndroidManifest.xml中申请WakeLock权限
然后在你需要保持系统一直运行的地方写下面的代码:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, CloudNoteService.class.getName());
wakeLock.acquire();
//在此执行你的代码
wakeLock.release();
wakeLock = null;
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, CloudNoteService.class.getName());
wakeLock.acquire();
//在此执行你的代码
wakeLock.release();
wakeLock = null;
原理:
PowerManager,手机的电源管理相关组件。 WakeLock,用于程序控制是否一直保持手机运行状态组件。WakeLock的保持运行共包括四个类型,最好使用比较低的级别,以降低手机电池的使用量。
Flag值 CPU 屏幕 键盘
PARTIAL_WAKE_LOCK On* Off Off
SCREEN_DIM_WAKE_LOCK On Dim Off
SCREEN_BRIGHT_WAKE_LOCK On Bright Off
FULL_WAKE_LOCK On Bright Bright
所有的类型CPU都是保持运行,屏幕和键盘分为关闭、暗光、亮光三个级别,我们经常用的应该是PARTIAL_WAKE_LOCK,保持CPU运行就行了。
在服务类中的使用
对于编写的android服务,在手机锁屏休眠后,服务也可能会停止运行,我们可以使用此方法让服务保持运行,但代码写法和上面稍有不同。如下:
public class MyService extends Service {
1public class MyService extends Service {
WakeLock wakeLock = null;
@Override
public void onCreate() {
super.onCreate();
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, CloudNoteService.class.getName());
wakeLock.acquire();
}
@Override
public void onDestroy() {
if (wakeLock != null) {
wakeLock.release();
wakeLock = null;
}
super.onDestroy();
}
}
WakeLock wakeLock = null;
@Override
public void onCreate() {
super.onCreate();
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, CloudNoteService.class.getName());
wakeLock.acquire();
}
@Override
public void onDestroy() {
if (wakeLock != null) {
wakeLock.release();
wakeLock = null;
}
super.onDestroy();
}
}