【问题标题】:Blackberry - Running Background Application黑莓 - 运行后台应用程序
【发布时间】:2011-02-15 15:01:20
【问题描述】:

下午好。 我开始用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();
        }

    }           

}

感谢您的帮助。

【问题讨论】:

    标签: blackberry process background-application


    【解决方案1】:

    后台应用是一种进程,所以至少一开始是没有GUI的。

    • 您应该扩展 Application 而不是 UIApplication 类
    • 你不应该把屏幕推到那里,只需将所有东西从 iconnoti 类移动到 cron 类并在 Application 构造函数中运行它:

      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) {
          }
      }
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多