Android Framework Ports - Maximum Hidden Apps

        Android open source project (ICS) supports a maximum of 15 hidden applications running at any point and any attempt to launch new apps kills the least recently used ones. As per the documentation, this is done to reduce the load on RAM and has been the case since early version of Android.

       However, the OEMs who port android on their board often don't realize that this number is a based on the size of RAM on the device and i just came across one such device whose activity manager started knocking out processes as soon as the device booted up (without any user intervention to start an application). It was obvious that they wanted more applications to be launched simultaneously, however didn't care about the maximum limit.

02-19 13:43:55.194 I/ActivityManager( 1096): No longer want com.lge.omadmclient:remote (pid 23052): hidden #16

      And as to what the factor is... Its probably based on the memory specifications of Android's compatibility definition document. Any additional memory (on top of the one specified in CDD) should be considered to increase the maximum limit proportionately. On the other hand, an increased maximum limit could accomodate a heavy duty process and could impact run time performance which is indicative of the fact that the limit should be based on the threshold memory size rather than the number of process in memory. This should facilitate easy, quick and stable ports of Android and avoid burning of CPU cycles during boot up.

Android's Warm start up of Applications


      Android framework supports boot up notification (broadcasts) for applications to start after the device boots up or after the framework reboots. Framework has to start a new process to host the Broadcast Receiver component and this takes more processing time compared to an already existing process. The only alternative is to have the empty process created even before processing broadcast boot up event and this is a small time window in the context of device boot up and yet android supports this for applications installed as a part of the system image.

    All that is needed is to enable the application to be persistent in its manifest (android:persistent="true"). Activity Manager has the logic to create empty process (via zygote) for all persistent applications.

   The only downside being that this is supported only for system applications controlled by platform developers and support for 3rd party apps would need an android fork with necessary changes to the platform.