备选方案

首先,官方提供了一些功能来满足我们开发一些特定功能的需求。

  • 如果要执行一个长时间的下载任务,使用 DownloadManager
  • 如果要和服务器 sync 数据,使用 Sync adapter
  • 依赖一些 service 做一些后台工作,可以使用 JobScheduler

如果上面的功能满足不了你的需求,才考虑使用 wake lock。

保持屏幕常亮

保持屏幕常亮的方法很简单,在 Activity 中增加 flag 即可。

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 中申明。

<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 工作

首先要加一个权限:

<uses-permission android:name="android.permission.WAKE_LOCK" />

接下来有两种使用方法。

第一种是手动获取 wake lock

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
        "MyApp::MyWakelockTag");
wakeLock.acquire();

手动获取 wake lock,后执行自己的操作。再通过 wakeLock.release() 释放。

第二种方式是使用WakefulBroadcastReceiver,算了看了下文档,说是已经弃用了,就不介绍了。


krosshj
152 声望16 粉丝

Developer, Gamer, Artist