Android 程序一直运行

源地址:http://www.eoeandroid.com/thread-78312-1-1.html

在正常情况下,Android系统会让程序和服务进入休眠状态以节约电量使用。然而在开发Android程序时,有时候在程序运行的时候,不能让系统休眠,否则有一些运行会停止,因此我们需要设置禁止休眠。
Android中设置禁止休眠有两种方式:

1. 在View中设置FLAG_KEEP_SCREEN_ON。
实现上可以在代码中设置,也可以在XML文件中设置。
代码如下所示:

java:

  1. getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);


或者配置文件对该View设置:

java:

  1. <LinearLayout
  2. android:layout_width=”fill_parent” a
  3. ndroid:layout_height=”fill_parent”
  4. android:keepScreenOn=”true”
  5. android:orientation=”vertical” xmlns:android=”http://schemas.android.com/apk/res/android”&gt;


这样可以保持当前View所在的Activity一直在活动状态运行,而且屏幕是高亮的。非常耗电!!

2.通过PowerManager来精细控制。
首先在Manifest.xml文件里面用user-permission声明

java:

  1. <uses-permission android:name=”android.permission.WAKE_LOCK”/>
  2. <uses-permission android:name=”android.permission.DEVICE_POWER” />


之后通过PowerManager服务来获取电量控制锁:

java:

  1. private void acquireWakeLock() {
  2. if (wakeLock == null) {
  3. PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
  4. wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this.getClass().getCanonicalName());
  5. wakeLock.acquire();
  6. }
  7. }


newWakeLock有两个参数,第一个参数定义了行为,第二个参数是调试的那个Tag,可以定义为类名。第一个参数取值如下:

Flag Value CPU Screen Keyboard
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

*PARTIAL_WAKE_LOCK参数和其他不同,如果选择了这个参数,那即时用户按了关机键,CPU仍保持运行;而其他参数在用户按了关机键之后,CPU即停止运行,如果不按关机键,系统在过一段时间休眠后,CPU仍保持运行。

在程序退出时,必须释放WakeLock:

java:

  1. private void releaseWakeLock() {
  2. if (wakeLock != null && wakeLock.isHeld()) {
  3. wakeLock.release();
  4. wakeLock = null;
  5. }
  6. }
  这两个方法分别在OnCreate/OnDestroy或者OnResume/OnPause中调用


Advertisements
This entry was posted in Android. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s