If you are interested in its source code, go check it out at my GitHub repository.
In my Magic, there are probably 20-30 boot-time services it has to run. No wonder the slow boot.
Furthermore, I was thinking if it might be possible to disable/enable boot-time services as what we used to do in Windows or Linux. So, I added code to try.
In AndroidManifest.xml,
and in Java,
pm.setComponentEnabledSetting( new ComponentName(appInfo.packageName, appInfo.name), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);But, the application threw an SecurityException immediately after the line above.
E/AndroidRuntime( 3188): java.lang.SecurityException: Permission Denial: attempt to change component state from pid=3188, uid=10026, package uid=10023It makes sense totally. If an application can change other application's state, what will happen? A big security hole.
One thing I leaned from trying this is that I noticed some applications use BOOT_COMPLETED as a way to auto-start themselves after boot completed. This means if you want your application to run automatically after boot, register a boot-time BroadcastReceiver and start your main activity in onReceiver().