Estoy tratando de comprender el código aquí , específicamente la clase anónima

private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
   final long start = mStartTime;
   long millis = SystemClock.uptimeMillis() - start;
   int seconds = (int) (millis / 1000);
   int minutes = seconds / 60;
   seconds     = seconds % 60;

   if (seconds < 10) {
       mTimeLabel.setText("" + minutes + ":0" + seconds);
   } else {
       mTimeLabel.setText("" + minutes + ":" + seconds);            
   }

   mHandler.postAtTime(this,
           start + (((minutes * 60) + seconds + 1) * 1000));
   }
};

Que dice el artículo

El Controlador se ejecuta el código de actualización como parte de su hilo principal, evitando la sobrecarga de un segundo hilo..

No debe crear una nueva clase Runnable hacer un nuevo segundo hilo? ¿Cuál es el propósito de la clase Runnable aquí, aparte de ser capaz de pasar un Ejecutable clase a postAtTime?

Gracias

OriginalEl autor sgarg | 2012-01-27

8 Comentarios

  1. 45

    Runnable se utiliza a menudo para indicar el código que el hilo se debe ejecutar, pero Runnable en sí no tiene nada que ver con los hilos. Es sólo un objeto con un run() método.

    En Android, el Handler clase se puede usar para hacer el marco para ejecutar algún código más tarde en el mismo hilo, en lugar de en uno diferente. Runnable se utiliza para proporcionar el código que se debe ejecutar después.

    «Ejecutables en sí no tiene nada que ver con los hilos de rosca» este es conceptualmente EQUIVOCADO! Por favor, lea la documentación. La interfaz Runnable debe ser implementada por cualquier clase cuyas instancias son destinadas a ser ejecutadas por un hilo. También es confuso cuando Runnable es pasado, pero las cosas suceden en el mismo hilo. Por favor, lea sobre «principio de la menor sorpresa».
    el Runnable charlas de documentación sobre hilos porque son los que la mayoría de los común el uso de Runnable, pero la interfaz es adecuada para cualquier tipo de devolución de llamada. Creo que el Android Handler‘s uso de Runnable es totalmente razonable — es mejor que la definición de un nuevo Android-interfaz específica que es idéntica a la Runnable pero con un nombre diferente.
    Un ejemplo de «new Runnable()» sin «se extiende el Hilo» ni «implements Runnable»: docs.oracle.com/javase/tutorial/uiswing/examples/start/…
    Nunca me ha gustado la redacción de los Ejecutables del javadoc (citado anteriormente), y al parecer el Java a la gente de acuerdo en que era demasiado estrecho. Observe la forma en que mejoró la misma redacción en el que se puede llamar la javadoc: «Los que se puede llamar la interfaz es similar a la de Ejecutables, en la que ambos están diseñados para las clases cuyas instancias son potencialmente ejecutada por otro subproceso.»

    OriginalEl autor Wyzard

  2. 27

    Si desea crear un nuevo Thread…se puede hacer algo como esto…

    Thread t = new Thread(new Runnable() { public void run() { 
      //your code goes here... 
    }});
    No es lo que el OP se le preguntó.

    OriginalEl autor Shashank Kadne

  3. 16

    La Runnable interfaz es otra forma en que usted puede implementar multi-threading aparte de la ampliación de la Thread clase debido al hecho de que Java le permite extender una única clase.

    Sin embargo, puede utilizar el new Thread(Runnable ejecutables) constructor, algo como esto:

    private Thread thread = new Thread(new Runnable() {
    public void run() {
       final long start = mStartTime;
       long millis = SystemClock.uptimeMillis() - start;
       int seconds = (int) (millis / 1000);
       int minutes = seconds / 60;
       seconds     = seconds % 60;
    
       if (seconds < 10) {
           mTimeLabel.setText("" + minutes + ":0" + seconds);
       } else {
           mTimeLabel.setText("" + minutes + ":" + seconds);            
       }
    
       mHandler.postAtTime(this,
               start + (((minutes * 60) + seconds + 1) * 1000));
       }
    });
    
    thread.start();
    este ejemplo crea un nuevo hilo o no, porque usted ha utilizado Hilo pero no se llama start()..
    En este ejemplo se crea un nuevo Subproceso objeto. Para ejecutarlo, simplemente llame a la start() método así: thread.start(). Que debería llama internamente a la run() método (nota, nunca se debe llamar la run() método de sí mismo) que kick se inicia el subproceso.

    OriginalEl autor npinti

  4. 11

    Puede crear un hilo como este:

     Thread thread = new Thread(new Runnable() {
                        public void run() {
    
                           }
                        });
                    thread.start();

    Además, puede utilizar el Ejecutable, Asyntask, Temporizador, TimerTaks y AlarmManager para ejecutar Subprocesos.

    puede reemplazar el run() método del Hilo. ¿Cuál es la ventaja de crear el Ejecutable?

    OriginalEl autor Victor Ruiz C.

  5. 7

    Runnable es sólo una interfaz, que proporciona el método de ejecución.
    Los hilos son de las implementaciones y el uso de Ejecutables para llamar al método run().

    OriginalEl autor Matthias Bruns

  6. 1

    No debe crear una nueva clase Runnable hacer un nuevo segundo hilo?

    No. nueva Runnable no crea segundo Thread.

    ¿Cuál es el propósito de la clase Runnable aquí, aparte de ser capaz de pasar un Ejecutable clase a postAtTime?

    Runnable es enviado a Handler. Esta tarea se ejecuta en el hilo, que está asociada con Handler.

    Si Handler se asocia con el Subproceso de interfaz de usuario, Runnable se ejecuta en el Subproceso de interfaz de usuario.

    Si Handler se asocia con otros HandlerThread, Ejecutable se ejecuta en HandlerThread


    A asociar explícitamente el Controlador de MainThread ( Subproceso de interfaz de usuario), escriba a continuación el código.

    Handler  mHandler = new Handler(Looper.getMainLooper();

    Si escribir es el siguiente, se utiliza HandlerThread Looper.

    HandlerThread handlerThread = new HandlerThread("HandlerThread");
    handlerThread.start();
    Handler requestHandler = new Handler(handlerThread.getLooper());

    OriginalEl autor Ravindra babu

  7. 0

    Mejor y de forma más fácil es pasar argumento y crear la instancia y de la llamada
    hilo método

    Llamada rosca con crear un subproceso objeto y enviar un ejecutable objeto de la clase con el parámetro o sin parámetro y método de inicio de hilo objeto.

    En mi condición, yo soy el envío de parámetros y voy a utilizar en el método run.

    new Thread(new FCMThreadController(«2», null, «3», «1»)).start();

    O

    new Thread(new FCMThreadController()).start();

    public class FCMThreadController implements Runnable {
    private String type;
    private List<UserDeviceModel> devices;
    private String message;
    private String id;
    
    
        public FCMThreadController(String type, List<UserDeviceModel> devices, String message, String id) {
    
            this.type = type;
            this.devices = devices;
            this.message = message;
            this.id = id;
        }
    
    
    
        public FCMThreadController( ) {
    
        }
    
        @Override
        public void run() {
            //TODO Auto-generated method stub
    
        }
    
    
    
    }

    OriginalEl autor Sameer Kazi

  8. 0

    Un hilo es algo así como algunas sucursales. Múltiples ramificaciones significa que cuando hay al menos dos ramas. Si las ramas se reducen, entonces el mínimo sigue siendo uno. Este es aunque, al igual que las ramas se quita, pero en general no tenemos en cuenta que la rama.

    Forma similar, cuando existen al menos dos hilos de la llamamos multi-threaded programa. Si los hilos se reduce, el mínimo sigue siendo uno. Hola es un programa de un solo subproceso programa, pero nadie necesita saber multi-threading para escribir o ejecutar.

    En palabras simples, cuando un programa no se dice que se tiene de los hilos, esto significa que el programa no es un multi-threaded programa, aún más, en cierto sentido se trata de un solo subproceso programa, en el que USTED PUEDE poner su código como si es multi-hilo.

    Por debajo de un inútil código, pero que será suficiente para acabar con su algunas confusiones acerca de Runnable. Se imprimirá «Hola Mundo».

    class NamedRunnable implements Runnable {
    
        public void run() { //The run method prints a message to standard output.
            System.out.println("Hello World");
        }
    
        public static void main(String[]arg){ 
            NamedRunnable namedRunnable = new NamedRunnable( );
            namedRunnable.run();
        } 
    }

    OriginalEl autor Harjit Singh

Dejar respuesta

Please enter your comment!
Please enter your name here