Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does service.startForeground imply wakelock?

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.

like image 250
hb0 Avatar asked Dec 11 '22 05:12

hb0


2 Answers

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.

like image 78
hb0 Avatar answered Dec 31 '22 12:12

hb0


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

like image 41
k8C Avatar answered Dec 31 '22 12:12

k8C