保持屏幕开启
最好的方法是在你的活动中使用 FLAG_KEEP_SCREEN_ON。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
另一种实现方式是在应用程序的布局 XML 文件中,使用 android:keepScreenOn 属性:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true">
...
</RelativeLayout>
保持 CPU 开启
如果您需要保持 CPU 运行以在设备进入睡眠状态之前完成某些工作,您可以使用称为唤醒锁的 PowerManager 系统服务功能。唤醒锁允许您的应用程序控制主机设备的电源状态。
创建和保持唤醒锁会对主机设备的电池寿命产生巨大影响。因此,您应该仅在绝对必要时使用唤醒锁,并尽可能短地持有它们。例如,您永远不需要在活动中使用唤醒锁。如上所述,如果您想在 Activity 中保持屏幕开启,请使用 FLAG_KEEP_SCREEN_ON。
使用唤醒锁的一个合理案例可能是后台服务需要获取唤醒锁以在屏幕关闭时保持 CPU 运行以完成工作。不过,由于这种做法会影响电池寿命,因此应尽量减少这种做法。
要使用唤醒锁,第一步是将 WAKE_LOCK 权限添加到应用程序的清单文件中:
<uses-permission android:name="android.permission.WAKE_LOCK" />
如果您的应用包含使用服务执行某些工作的广播接收器,您可以通过 WakefulBroadcastReceiver 管理唤醒锁定,如使用 WakefulBroadcastReceiver 中所述。这是首选方法。如果您的应用不遵循该模式,您可以通过以下方式直接设置唤醒锁定:
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"MyWakelockTag");
wakeLock.acquire();
要释放唤醒锁,请调用wakelock.release(). 这将释放您对 CPU 的要求。请务必在您的应用使用完毕后立即释放唤醒锁,以免耗尽电池电量。