Does service.startForeground imply wakelock?

2019-05-10 06:52发布

Question

I am wondering if we need to aquire the WakeLock or if the service.startForeground() command does that anyway for us? I didn't find anything in the documentation.

Goal

We want to remove unnesessary stuff which might slow down the service start as we want to start capturing the sensor data as soon as possible and as the service might be restarted frequently.

Context

We're developing an Android library to capture sensor data with ~ 200 Hz for up to a couple of hours (research environment). Right now we aquire a WakeLock and start the capturing service as ForegroundService to make sure our capturing isn't stopped when the device is not used.

2条回答
冷血范
2楼-- · 2019-05-10 07:07

No, wakelock can be used to make sure your foreground services run when device goes to sleep

If you must use partial wake locks, follow these recommendations:

  • Make sure some portion of your app remains in the foreground. For example, if you need to run a service, start a foreground service instead. This visually indicates to the user that your app is still running.

https://developer.android.com/topic/performance/vitals/wakelock#best_practices

查看更多
SAY GOODBYE
3楼-- · 2019-05-10 07:15

To answer my own question (if no one else finds more details on this):

In my understanding "foreground" just describes that the user would notice if the app was killed e.g. when browsing a large page. For this reason the system is asked to try to avoid killing the service.

  • Just because a foreground service is running probably not implies that the CPU can't go into deep sleep mode.

In order to collect sensor data all the time from user-defined start to stop we still need to aquire the WakeLock ourselves.

查看更多
登录 后发表回答