Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo iniciar un nuevo Thread en un servicio?

Estoy desarrollando una aplicación de Android y estoy haciendo un trabajo pesado (trayendo datos de una página web en línea y analizándola para almacenarla en una base de datos) en un servicio. Actualmente, se tarda unos 20 minutos + y para este momento mi interfaz de usuario está atascado. Yo estaba pensando en usar un hilo en el servicio para mi interfaz de usuario no se atascan, pero es dar error. Estoy usando el siguiente código:

Thread thread = new Thread() { @Override public void run() { try { while(true) { sleep(1000); Toast.makeText(getBaseContext(), "Running Thread...", Toast.LENGTH_LONG).show(); } } catch (InterruptedException e) { Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show(); } } }; thread.start(); 

Este código simple está dando error de tiempo de ejecución. Incluso si tomo el bucle while, todavía no funciona. Por favor, cualquiera puede decirme qué error estoy haciendo. Al parecer, copié este código directamente de un e-libro. Se supone que para trabajar, pero no es.

  • Solución para el país aún no compatible con Android Market Merchandise
  • ¿Cómo configurar el color de las cargas de carga de Google Maps?
  • Android: cambia el texto del botón y el color de fondo
  • Consiga tiempo real - no dispositivo fije el tiempo en androide
  • Error: causa android.compileSdkVersion falta
  • Programación de GPU en dispositivos Android
  • Ocultar clases de biblioteca - Android
  • ¿Cómo funciona onLowMemory en android?
  • ¿Cuál es la diferencia entre SPAN_POINT_MARK y SPAN_MARK_POINT?
  • Todas las bibliotecas com.android.support deben utilizar la misma especificación de versión
  • Las anotaciones en línea dan errores de sintaxis
  • ¿Es posible ejecutar Xamarin Mono en Linux?
  • 4 Solutions collect form web for “¿Cómo iniciar un nuevo Thread en un servicio?”

    Ejemplo de creación de nuevos hilos extraídos de muestras de Android (android-8 \ SampleSyncAdapter \ src \ com \ ejemplo \ android \ samplesync \ client \ NetworkUtilities.java):

     public static Thread performOnBackgroundThread(final Runnable runnable) { final Thread t = new Thread() { @Override public void run() { try { runnable.run(); } finally { } } }; t.start(); return t; } 

    runnable es Runnable que contiene las operaciones de red.

    Mandamiento de Android: no debes interactuar con objetos UI de tus propios hilos

    Envuelva su pantalla Toast en runOnUIThread(new Runnable() { });

    Puede utilizar HandlerThread y publicar en él, aquí hay un ejemplo de servicio que tiene uno.

     public class NetworkService extends Service { private HandlerThread mHandlerThread; private Handler mHandler; private final IBinder mBinder = new MyLocalBinder(); @Override public void onCreate() { super.onCreate(); mHandlerThread = new HandlerThread("LocalServiceThread"); mHandlerThread.start(); mHandler = new Handler(mHandlerThread.getLooper()); } public void postRunnable(Runnable runnable) { mHandler.post(runnable); } public class MyLocalBinder extends Binder { public NetworkService getService() { return NetworkService.this; } } @Override public IBinder onBind(Intent intent) { return mBinder; } } 

    Puede definir sus trabajos en un objeto ejecutable, utilizar un objeto de subproceso para ejecutarlo e iniciar este subproceso en la función onStartCommand () de su servicio. Aquí están mis notas:

    En su clase de servicio:

    1. Define tu bucle principal en un objeto Runnalbe
    2. Cree el objeto de rosca con el objeto runnable como parámetro

    En el método onStartCommand de su clase de servicio ():

    1. Llamada función de inicio del objeto de hilo ()

    mi código :

     private Runnable busyLoop = new Runnable() { public void run() { int count = 1; while(true) { count ++; try { Thread.sleep(100); } catch (Exception ex) { ; } ConvertService.running.sendNotification("busyLoop" + count); } } }; public int onStartCommand(Intent intent, int flags, int startId) { sendNotification("onStartCommand"); if (! t.isAlive()) { t.start(); } return START_STICKY; } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.