Antes de terminar (1) det Optimizar el tiempo para que la aplicación se lance Los usuarios son impacientes: no quieren esperar por la TV Ver qué ficheros son necesarios para tener el primer gráfico en pantalla Ajustar nuestra difusión para que se carguen juntos y de forma rápida Decodificar imágenes es lento (Ej.: JPEGS a pantalla completa) Realizar cargas asíncronas (por ejemplo de imágenes) Hacer lo mismo en las principales transiciones entre diferentes partes de nuestra aplicación !El difusor no sabrá lo suficiente sobre nuestra aplicación para hacerlo por nosotros! TV Digital Interactiva: Arquitecturas y servicios 89 Antes de terminar (2) det Comprobar que nuestra aplicación finaliza adecuadamente La especificación MHP da una lista de cosas que las aplicaciones deben haces antes de terminar. Por ejemplo: Hacer que las threads creadas terminen voluntariamente Parar (stop()), liberar ( deallocate()) y cerrar (close()) cualquier reproductor JMF que hayamos creado Parar (stop()) y destruir (destroy()) cualquier ServiceContext que hayamos creado Vaciar las imágenes pendientes utilizando el método Image.flush() No retrasar innecesariamente el método Xlet.destroy() Hacer esto es ser considerado con las demás aplicaciones del STB. TV Digital Interactiva: Arquitecturas y servicios 90 Antes de terminar (3) det Un STB no es una plataforma de altas prestaciones No esperar prestaciones “PC”. Fiabilidad y robustez son vitales En el entorno de consumo los usuarios no toleran aplicaciones que se “cuelgan” Aplicaciones no fiables hacen que el STB parezca no fiable Recordar que nuestra aplicación puede ser detenida y relanzada en cualquier momento Los recursos son muy escasos, y podemos perderlos en cualquier momento Pero también podemos recuperarlos en cualquier momento TV Digital Interactiva: Arquitecturas y servicios 91 Infraestructura de desarrollo de aplicaciones det Se puede empezar el desarrollo en cualquier ordenador utilizando JDK o equivalente Se necesitan algunas APIs MHP (por ejemplo JavaTV) No se pueden probar fácilmente las interfaces de usuario sobre un TV Disponer de una versión de desarrollo de un STB MHP Permite hacer cosas mucho más próximas a la realidad Para optimizar el tiempo de arranque de la aplicación: Entorno de generación de carruseles de objetos DSMCC Modulador/multiplexor MPEG para “alimentar” el STB TV Digital Interactiva: Arquitecturas y servicios 92 det Ejemplo de aplicación TV Digital Interactiva: Arquitecturas y servicios 93 import org.dvb.ui.*; javax.tv.xlet.*; import java.awt.*; org.havi.ui.*; import org.havi.ui.*; public class xlet implements Xlet { Public class NuevaEscena extends HContainer { //HScene: logo; window frame que contiene todos los elementos que se añadan image Cada aplicación debe tener una clase que extienda el HScene Escena; interface {Java Tv Xlet NuevaEscena MainScene() EscenaNueva1; public logo void = Toolkit.getDefaultToolkit().getImage(“logo.gif”); initXlet(XletContext ctx) throws { ()), Debe contener código paraXletStateChangeException inicializar (initXlet Escena MediaTracker = HSceneFactory.getInstance().getBestScene(null); trk = new MediaTracker(this); empezar= new (startXlet ()), parar (pauseXlet()) y acabar EscenaNueva1 trk.addImage(logo,0); NewScene(); } try {trk.waitForAll();} catch (Exception ex) {} (destroyXlet()) public System.out.println(“Got void initXlet() throwsImage”); XletStateChangeException { } NuevaEscena1.setBounds(Escena.getBounds()); Ya tenemos un Xlet, ahora podemos añadir elementos a la Escena.add(NuevaEscena1); public Escena.setVisible(true); void paint HScene : (Graphics g) { Escena.repaint(); g.setColor(new DVBColor(0, 0, 255, 128)); NuevaEscena1.requestFocus(); g.fillRect(80, 80, 480, 340); Nosotros añadiremos un componente simple basado en } g.setColor(new Color(0, 0, 255)); HComponent de HAVi en el que dibujaremos con public g.fillRect(100, void pauseXlet() 100, 440, 300); { Escena.setVisible(false);} g.drawImage(logo, 120, estándar this); funciones 120, AWT public g.setColor(Color.white); void destroyXlet(boolean unconditional) throws XletStateChangeException { El MediaTracker pauseXlet(); g.setFont(new Font(“Tiresias”,espera 0, 50)); a que llegue la imagen en el HSceneFactory.getInstance().dispose(Escena); g.drawString(“Hello carrusel. World!”, 140, 300); } } Ejemplo de aplicación DVB-J TV Digital Interactiva: Arquitecturas y servicios det el 94