There are two reasons for services. One is for background task and the other is for communication between processes. There are two types of services: Local and Remote. If a service is started via Contex.startService(), then it is a Local Service. Remote service requires a AIDL file. AIDL stands for Android Interface Definition Language. In Eclipse, java code will be automatically generated for AIDL files. To me, the majoy difference between the local and remote service implementation and invocation is the AIDL file. The other steps are similar. Another difference is that local service as its name implies is only available to the parent process that invoke it while Remote service is available to all process in the same device (wihtin the same adroid phone for examle).