2009-10-29 9 views
5

Quiero programar automáticamente un hilo con un intervalo de tiempo en particular. También necesito ejecutar esto en segundo plano continuamente sin colgar en el dispositivo.Cómo puedo programar un hilo en particular en Blackberry

He intentado esto con Application Manager Class, pero es para la programación de aplicaciones y necesito programar el hilo dentro de la aplicación.

Respuesta

6

me gustaría utilizar TimerTask:

public class MyScreen extends MainScreen { 
    private Timer mTimer; 
    public MyScreen() {   
     mTimer = new Timer(); 
     //start after 1 second, repeat every 5 second 
     mTimer.schedule(mTimerTask, 0, 5000); 
    } 

    TimerTask mTimerTask = new TimerTask() { 
     public void run() { 
      // some processing here 
     } 
    }; 
} 

ver BlackBerry API Hidden Gems (Part Two)

0

Mientras la aplicación esté ejecutándose, simplemente cree el hilo y después de cada bit de trabajo llame al Thread.sleep durante el tiempo que lo necesite para permanecer inactivo.

Si lo necesita para despertar hasta en un momento determinado, en lugar de dormir por un tiempo determinado, entonces usted puede hacer algo como lo siguiente:

Date wakeUpAt = ...; // Get this however 
Date now = new Date(); 
long millisToSleepFor = wakeUpAt.getTime() - now.getTime(); 
Thread.sleep(millisToSleepFor); 
+0

Gracias pero en el sueño que cuelga de un momento dado de tiempo (tiempo millisToSleepFor). – Rishabh

+0

¿Está diciendo que mientras el subproceso está inactivo, el dispositivo no programa ningún otro subproceso? El punto principal del sueño() es que el hilo no está programado en la CPU por ese período de tiempo ... –

2

uso UiApplication.getUiApplication().invokeLater() que acepta un retraso y repite los parámetros y realizará exactamente lo que necesita.

EDITAR

Sé que este post es antiguo, pero esto es, con mucho, la mejor opción para programar eventos que se repiten y me gustaría añadir que para detener el evento programado se requiere lo siguiente:

//Start repeating "runnable" thread every 10 seconds and save the event ID 
int eventId = UiApplication.getUiApplication().invokeLater(runnable, 10000, true); 

//Cancel the repetition by the saved ID 
UiApplication.getUiApplication().cancelInvokeLater(eventId); 
+0

Correcto, pero ¿Hay alguna manera de que el hilo comience a ejecutarse después de salir de la aplicación con un retraso dado, por ejemplo, retraso de 1 día. – Rishabh

+0

puede agregar UiApplication.getUiApplication(). RequestBackground(); en su método anulado OverClose() para dejar la aplicación ejecutándose en segundo plano pero (afaik) cualquier cadena de caracteres que inicie desde el punto de vista del contexto de las aplicaciones se eliminará después de que se cierre correctamente, incluidos los hilos programados. – Lisandro

1

Suponiendo que desea ejecutar un hilo en el inicio del dispositivo: Cree un segundo proyecto y enumérelo como un punto de entrada alternativo. En su UiApplication o Application main(), verifique el argumento pasado al proyecto. Haga sus cosas periódicas allí a través de Thread.sleep y no llame a enterEventDispatcher.

búsqueda de "inicio automático": http://docs.blackberry.com/en/developers/deliverables/1076/development.pdf

O si usted quiere hacer algo una vez "comienza" a un usuario que, a continuación, busque en la creación de un nuevo hilo para hacer sus cosas sincronización. Anule la pantalla de su pantalla en Cerrar() y use Application.getActivation(). Deactivate() para poner la pantalla en segundo plano.

O hay otras formas de hacer algo como esto como invokeLater, etc. Tal vez los oyentes event pueden hacer lo que necesita, pero no dio muchos detalles.

Cuestiones relacionadas