Hi,

You can prove this yourself by creating a test app with a service & running 
a few tests.

Run the test app & start the service on a recent device with Android V4+ 
then leave the service running & go & do other stuff for a while.

Sometime during the next few hours you probably find that your service has 
been killed by the OS regardless of whether the service was busy or not (& 
regardless of OOM pressure).

If you want the service to remain running longer than a few hours you will 
need to use 
'startForeground' 
http://developer.android.com/reference/android/app/Service.html#startForeground(int,
 
android.app.Notification) but even that will not prevent the OS from 
killing your service when it thinks it really needs to due to memory 
pressure.

Once upon a time before approximately Android V2.2 services were left 
running indefinitely & weren't eagerly killed by the OS ( even without 
having to specify 'startForeground' or 'setForeground' ) provided there was 
no memory pressure, but that's no longer the case.

What's officially documented & what actually happens on real devices will 
vary, so prove to your own satisfaction by testing...

Regards

On Tuesday, December 9, 2014 12:01:12 PM UTC+11, Peter Teoh wrote:
>
> *The Service can still be killed by Android.*
>
>
> Any proofs?
>
> not any proofs, but just some discussion is possible:
>
> Read this:
>
>
> http://developer.android.com/reference/android/content/Context.html#startService%28android.content.Intent%29
>
> From above, there is a line:   
>
> The only time they should be stopped is if the current foreground 
> application is using so many resources that the service needs to be killed.
>
> This is talking about the OOM killer.
>
> In traditional Linux OOM is initiated from the kernel.   But here in 
> Android there is a special lowmemorykiller daemon:
>
> https://source.android.com/devices/tech/low-ram.html   (looked out for 
> lowmemorykiller, the name as it is)
>
> Under Android source code:
>
>
> frameworks/base/services/core/java/com/android/server/am/ActiveServices.java:
>     final void killServicesLocked(ProcessRecord app, boolean allowRestart) 
> {
>
>
> frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java:
>         mServices.killServicesLocked(app, allowRestart);
>
> You can see the caller and the implementer of the function above.   It is 
> where BIND_ALLOW_OOM_MANAGEMENT parameter are checked, and thus killing the 
> services is done if necessary.
>
> More info:
>
>
> http://stackoverflow.com/questions/18972590/the-timing-to-start-android-low-memory-killer
>
> http://forum.xda-developers.com/showthread.php?t=904023
>
> And this is from Linux kernel source code (under drivers/staging/android 
> means it is still yet to be approved by linux kernel - at that time):
>
>
> http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/drivers/staging/android/lowmemorykiller.txt
>
> http://www.programering.com/a/MjNzADMwATE.html
>
> http://lwn.net/Articles/511731/
>
> http://varun-anand.com/mem_mgmt.html
>
> Regards, 
> Peter Teoh
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to