The general trend should be to try and write services as non system services. If it is possible to
write a service as a standard android service you should not mess up with the platform
Normal services
-Follow the application life-cycle . They can be started on demand and stopped on low memory
-Require you to bind to them (asynchronously) as their lifecycle is managed by the activity manager.
-Are easy to write, debug and deploy
-Can be deployed on standard application
Services that bind directly to the naming service
-Require you to modify the platform (the naming service) or run as system user
-if run in the system server process can crash your full system
-usually run all the time (but can be started/stopped by setting system properties)
-When run inside the system server will "always" be there. this is quite nice as you can to a getService("bla") synchronously
I found you need to run such services when you modified the system itself. If for example you are adding hardware support
you will often find you can not use standard services. Such services will also use internal API's. That said you can also achieve
a lot and access many API's by running your APK in the system server (setting the user to the system user) this of course requires proper singing.
The thing really is to understand there are different things
-Services stated in the system server and system services as services stated by init.
Greetings