黑莓 - 运行后台应用程序

问题描述:

下午好。 我开始用java和黑莓编程。 我正在开发一个带有三个窗口的应用程序,我将显示有关设备的基本信息,这些窗口已经完成并正在工作。 我需要创建一个在后台运行的进程,该进程将每10分钟运行一次。 当我让这个过程在后台运行并正在关闭窗口?黑莓 - 运行后台应用程序

这是一个运行应用程序的类型:

public class InfoBerry extends UiApplication{ 
    public vtnprincipal vtnprincipal; 
    public vtnbateria vtnbateria; 
    public vtnestado vtnestado ; 
    public vtnacerca vtnacerca; 

    public InfoBerry(){ 

    } 

    public static void main(String[] args) { 
      InfoBerry theApp = new InfoBerry(); 
      theApp.mostrarpantalla(); 
    } 
    public void mostrarpantalla(){ 

     vtnprincipal = new vtnprincipal(this); 
     vtnbateria = new vtnbateria(this); 
     vtnestado = new vtnestado(this); 
     vtnacerca = new vtnacerca(this); 
     // Inicailizamos los componentes de la pantalla principal 
     vtnprincipal.incventana(); 
     // La pnemos en lo alto de la pila de pantallas 

     pushScreen(this.vtnprincipal); 
     } 
} 

这就是你需要在后台运行的类。 因为我必须让这个类的调用在后台运行?

class iconnoti extends MainScreen{ 
    //icono de la temperatura 
    EncodedImage imgtem = 
      EncodedImage.getEncodedImageResource("icon_bateria_t.png"); 
    ApplicationIcon icontem = new ApplicationIcon(imgtem); 
    //icono de la carga de la bateria 
    EncodedImage imgcarga = 
      EncodedImage.getEncodedImageResource("icon_bateria.png"); 
    ApplicationIcon iconcarga = new ApplicationIcon(imgcarga); 
    //icono de la memoria 
    EncodedImage imgmemo = 
      EncodedImage.getEncodedImageResource("icon_memoria.png"); 
    ApplicationIcon iconmemo = new ApplicationIcon(imgmemo); 
    ApplicationIcon mIcon = icontem; 
    boolean act; 
    public iconnoti() { 


    } 

    public void rotar_temperatura(){ 
     cron c1; 
     actualizar_icono(icontem); 
     actualizar_valor(DeviceInfo.getBatteryTemperature()); 

     c1 = new cron(2,10000); 
     c1.start(); 


    } 
    public void rotar_memoria(){ 
     cron c1; 
     actualizar_icono(iconmemo); 
     actualizar_valor(34); 

     c1 = new cron(3,10000); 
     c1.start(); 

    } 
    public void rotar_nivel(){ 
     cron c1; 
     actualizar_icono(iconcarga); 
     actualizar_valor(DeviceInfo.getBatteryLevel()); 
     c1 = new cron(1,10000); 
     c1.start(); 

    } 

    public void iniciar_servicio() { 
     try { 

      ApplicationIndicatorRegistry reg = 
        ApplicationIndicatorRegistry.getInstance(); 
       ApplicationIndicator Indicator = 
        reg.register(mIcon, false, true); 
       } catch (Exception e) { 

     } 
    } 

    public void parar_servicio() { 
     try { 
       ApplicationIndicatorRegistry reg = 
        ApplicationIndicatorRegistry.getInstance(); 
       reg.unregister(); 
     } catch (Exception e) { 
     } 
    } 

    void actualizar_valor(int value) { 
     try { 
       ApplicationIndicatorRegistry reg = 
        ApplicationIndicatorRegistry.getInstance(); 
       ApplicationIndicator appIndicator = 
        reg.getApplicationIndicator(); 
       appIndicator.setValue(value); 
     } catch (Exception e) { 
     } 
    } 

    void actualizar_icono(ApplicationIcon icon) { 
     try { 
       ApplicationIndicatorRegistry reg = 
        ApplicationIndicatorRegistry.getInstance(); 
       ApplicationIndicator appIndicator = 
        reg.getApplicationIndicator(); 
       appIndicator.setIcon(icon); 
     } catch (Exception e) { 
     } 
    } 
} 

class cron extends Thread { 
    //private ApplicationIcon icono; 
    public int valor; 
    private int tiempo; 
    iconnoti icon = new iconnoti(); 

    public cron(int v, int t){ 
     valor = v; 
     tiempo = t; 
    } 

    public void run() { 
     try { 
      sleep(tiempo); 
     } catch (InterruptedException e) { 

     } 
     if(valor == 1){ 
      icon.rotar_temperatura(); 
     }else if(valor == 2){ 
      icon.rotar_memoria(); 
     }else if(valor == 3){ 
      icon.rotar_nivel(); 
     } 

    }   

} 

感谢您的帮助。

背景应用程序是一种进程,所以在开始时至少没有GUI。

  • 你应该扩大,而不是UIApplication类应用
  • 你不应该推屏幕出现,只需将一切从iconnoti类与cron类,并在应用程序构造运行它:

    public class BerryInfoApp extends Application { 
        public BerryInfoApp() { 
          UpdateThread updateThread = new UpdateThread(10*60*1000); 
          updateThread.run(); 
        } 
        public static void main(String[] args) { 
         (new BerryInfoApp()).enterEventDispatcher(); 
        } 
    } 
    
    class UpdateThread extends Thread { 
    EncodedImage imgtem = EncodedImage 
         .getEncodedImageResource("icon_bateria_t.png"); 
    ApplicationIcon icontem = new ApplicationIcon(imgtem); 
    EncodedImage imgcarga = EncodedImage 
         .getEncodedImageResource("icon_bateria.png"); 
    ApplicationIcon iconcarga = new ApplicationIcon(imgcarga); 
    EncodedImage imgmemo = EncodedImage 
         .getEncodedImageResource("icon_memoria.png"); 
    ApplicationIcon iconmemo = new ApplicationIcon(imgmemo); 
    ApplicationIcon mIcon = icontem; 
    
    static final int ACTION_NONE = 0; 
    static final int ACTION_BATTERY_TEMP = 1; 
    static final int ACTION_MEMORY = 2; 
    static final int ACTION_BATTERY_LEVEL = 3; 
    int mAction = ACTION_BATTERY_LEVEL; 
    long mPeriod; 
    
    public UpdateThread(int period) { 
        mPeriod = period; 
    } 
    
    public void stop() { 
        mAction = ACTION_NONE; 
    } 
    
    public void run() { 
        iniciar_servicio(); 
        while (mAction != ACTION_NONE) { 
         switch (mAction) { 
         case ACTION_BATTERY_TEMP: 
          rotar_temperatura(); 
          mAction = ACTION_MEMORY; 
          break; 
         case ACTION_MEMORY: 
          rotar_memoria(); 
          mAction = ACTION_BATTERY_LEVEL; 
          break; 
         case ACTION_BATTERY_LEVEL: 
          rotar_nivel(); 
          mAction = ACTION_BATTERY_TEMP; 
          break; 
         default: 
          break; 
         } 
         try { 
          sleep(mPeriod); 
         } catch (InterruptedException e) { 
         } 
        } 
        parar_servicio(); 
    } 
    
    public void rotar_temperatura() { 
        actualizar_icono(icontem); 
        actualizar_valor(DeviceInfo.getBatteryTemperature()); 
    } 
    
    public void rotar_memoria() { 
        actualizar_icono(iconmemo); 
        actualizar_valor(34); 
    } 
    
    public void rotar_nivel() { 
        actualizar_icono(iconcarga); 
        actualizar_valor(DeviceInfo.getBatteryLevel()); 
    } 
    
    public void iniciar_servicio() { 
        try { 
         ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry 
           .getInstance(); 
         ApplicationIndicator Indicator = reg.register(mIcon, false, true); 
        } catch (Exception e) { 
        } 
    } 
    
    public void parar_servicio() { 
        try { 
         ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry 
           .getInstance(); 
         reg.unregister(); 
        } catch (Exception e) { 
        } 
    } 
    
    void actualizar_valor(int value) { 
        try { 
         ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry 
           .getInstance(); 
         ApplicationIndicator appIndicator = reg.getApplicationIndicator(); 
         appIndicator.setValue(value); 
        } catch (Exception e) { 
        } 
    } 
    
    void actualizar_icono(ApplicationIcon icon) { 
        try { 
         ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry 
           .getInstance(); 
         ApplicationIndicator appIndicator = reg.getApplicationIndicator(); 
         appIndicator.setIcon(icon); 
        } catch (Exception e) { 
        } 
    } 
    } 
    
+0

感谢您的回应和帮助,我正在实施代码,并在完成评论时发布。 谢谢。 – Leandro 2010-05-06 00:08:38

+0

不客气! – 2010-05-06 03:44:03