A arquitetura Android possui varias "maravilhas" e facilidades que auxiliam os desenvolvedores na hora de criar aplicativos robustos e versateis. Duas dessas "maravilhas" sao as classes Service e IntentService, onde cada uma possui sua particulariedade, vantagens e metodologias de implementacao. Para tanto, e necessario saber quando devemos utilizar uma classe ou outra a fim de nao fazer uma escolha erronea, afinal, quanto menos manutencao em nosso codigo fizermos, MENOS DOR DE CABECA! :-) Para exemplificarmos melhor, trago abaixo uma pequena tabela compartiva para que voces analisem e escolham qual classe implementar em seu projeto. Service.class IntentService.class Quando usar? Tarefas sem conteudos visuais (UI), mas sem excesso de tempo de execucao. Caso for utilizar em longos processos, utilize em conjunto com Threads. Geralmente, efetua longos processos sem comunicacao com a UIThread. Caso seja necessario, recomendo utilizar Handlers ou Broadcast Intents. Como usar? Utilizando a chamada para startService(...), bindService(...) atraves do metodo onStartCommand(...). Utilizando Intent apenas. Executada a partir de qual Thread? Qualquer Thread - com Context. Apenas na UIThread uma vez que Intent's sao utilizadas na UIThread, mas geram outras WorkerThreads. Funciona em qual Thread? UIThread ou Remote (Implementando o AIDL). Em uma WorkerThread separada. Desvantagens Pode travar a UIThread, se mal implementada. Nao executa tarefas paralelas e caso seja necessario rodar multiplas instancias do IntentService, sera gerado uma Fila - Queue - na mesma WorkerThread. Service.class public class MyService extends Service { @Override public IBinder onBind(Intent intent) { return new MyServiceBinder(); } ... public int onStartCommand(Intent intent, int flags, int startId) { Log.d("Tag", "Service executado com sucesso!"); return super.onStartCommand(intent, flags, startId); } private class MyServiceBinder extends Binder { public MyService getService() { return MyService.this; } } } IntentService.class public class MyIntentService extends IntentService { private static final String TAG = "myIntentServiceTag"; public MyIntentService() { super(TAG); } ... public void onHandleIntent(Intent intent) { Bundle extras = intent.getExtras(); if (extras.containsKey("pergunta")) { String pergunta = extras.getString("pergunta"); Log.d("Tag-IntentService", "A pergunta foi: " + pergunta); } } } Activity public class MainActivity extends Activity { ... private ConnectionService mConn; ... public void startService() { // Executando um Service... Intent intent = new Intent(this, MyService.class); startService(intent); } public void bindService() { if (mConn == null) { mConn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { MyService myService = ((MyService) service).getService(); // Voce pode chamar o metodo manualmente! myService.onStartCommand(...); } @Override public void onServiceDisconnected (ComponentName name) { // unbind(...) foi chamado! :-) } }; } Intent intent = new Intent(this, MyService.class); bindService(intent, mConn, Context.BIND_AUTO_CREATE); } public void startIntentService() { Intent intent = new Intent(this, MyIntentService.class); intent.putExtra("pergunta", "IntentService foi executado?"); startService(intent); } @Override public void onDestroy() { super.onDestroy(); // Nao esqueca! if (mConn != null) { unbindService(mConn); } } } Pense direito antes de implementar o tipo de Service que voce deseja, ambos possuem suas vantagens e desvantagens! Espero que ajude, abraco. 1. Obter o atual codigo de area do aparelho:TelephonyManager tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);if (tel.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM) { GsmCellLocation location = (GsmCellLocation) tel.getCellLocation(); if (location != null) { msg.setText("Codigo de Area: " + location.getLac()); }}OBS: Nao esqueca da respectiva permissao em seu AndroidManifest.xml ou uma