Cómo iniciar servicio en nuevo hilo en android

Soy nuevo en este android. Estoy usando un servicio para hacer un trabajo de fondo. Así que estoy comenzando el servicio de mi actividad como siguiente.

getApplicationContext().bindService( new Intent(getApplicationContext(), MyAndroidUpnpServiceImpl.class), serviceConnection, Context.BIND_AUTO_CREATE ); 

Pero el problema es que la actividad de Android está bloqueada. Hasta el servicio,

  onServiceConnected(ComponentName className, IBinder service){ ..} 

Se llama back.so que busqué en relación con esto. Llegué a saber que tengo que comenzar mi servicio en nuevo hilo. Así que por favor cualquiera me ayude en hacer esto.

Para crear e iniciar un nuevo hilo, desde dentro de una actividad, puede decir:

 Thread t = new Thread(){ public void run(){ getApplicationContext().bindService( new Intent(getApplicationContext(), MyAndroidUpnpServiceImpl.class), serviceConnection, Context.BIND_AUTO_CREATE ); } }; t.start(); 

Además, coloque en caché el valor devuelto por bindservice, si lo hubiera, si lo necesita para su uso posterior.

Cualquier solución que utilice Threads, Runnables, AsyncTask o de otro modo con un servicio tendrá un problema común .

El servicio bloqueará la actividad de llamada hasta que se inicie el servicio. Por lo tanto, no encripta eficazmente el Servicio en ciertos casos.

La solución a esto es usar la subclase IntentService .

Ejemplo de cómo implementar:

 public class MyCustomService extends IntentService { private DatabaseAdapter mAdapter; public MyCustomService() { super("MyCustomService"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); Toast.makeText(this, "MyCustomService Started", Toast.LENGTH_LONG).show(); // Don't let this service restart automatically if it has been stopped by the OS. return START_NOT_STICKY; } @Override protected void onHandleIntent(Intent intent) { Toast.makeText(this, "MyCustomService Handling Intent", Toast.LENGTH_LONG).show(); // INSERT THE WORK TO BE DONE HERE } } 

OnCreate () y onDestroy también pueden ser anulados siempre que super.onWhatever() sea ​​llamado dentro de ellos.

Vieja pregunta, pero estoy respondiendo porque alguien me llamó la atención en otra pregunta.

El problema del OP fue evidentemente causado por el servicio onBind(...) tomando mucho tiempo y bloqueando el hilo principal. La solución correcta es no hacer eso . El servicio necesita ser rediseñado para que onBind(...) regrese rápidamente. Como casi todo lo demás en la API de Android, siempre debes llamar a bindService(...) en el subproceso principal.

La razón es que la seguridad del hilo en Java no es sólo una cuestión de atomicidad, sino también de visibilidad . (Desplácese hacia abajo hasta la sección de visibilidad.) En general, siempre debe asumir que cada API de Java no es segura de subproceso a menos que esté explícitamente documentado de lo contrario.

Si alguien está leyendo esto está buscando una solución que implica mantener el hilo de interfaz de usuario en una ejecución fluida, es mejor comprobar la tarea AsyncTask aquí . aclamaciones.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.