2011-12-16 65 views
0

我有一個UI應用程序設置爲自動運行在啓動時產生一些線程在後臺執行一些工作。它有一個屏幕,顯示有關後臺線程正在進行的工作的信息。黑莓 - 無法前臺運行的應用程序

class AppName extends UiApplication implements SystemListener2 { 
    private static AppName app; 

    public static void main(String[] args) { 
     app = new AppName(); 

     if (ApplicationManager.getApplicationManager().inStartup()) { 
      app.addSystemListener(app); 
     } else { 
      app.initializeLater(); 
     } 
     app.enterEventDispatcher(); 
    } 

    public AppName() { 
     pushScreen(new InfoScreen()); 
     requestBackground(); 
    } 

    private void initialize() { 
     // Spawns some threads doing work in the background 
    } 

    private void initializeLater() { 
     invokeLater(new Runnable() { 
      public void run() { 
       initialize(); 
      } 
     }); 
    } 

    public void powerUp() { 
     removeSystemListener(this); 
     initialize(); 
    } 
} 

當我在模擬器中運行應用程序時,它工作正常。啓動後,一切都運行,然後當我點擊圖標時,屏幕被預先顯示並顯示。這是模擬器的輸出:

3:20:26.612: AM: Starting AppName 
3:20:26.612: AM: AppName already running 
3:20:26.612: AM: Foreground is requested: AppName(304) 
3:20:26.628: AM: Foreground is set: AppName(304) 

但是,在設備上屏幕從不顯示。這是設備調試器的輸出:

[0.0] Starting AppName 
[0.0] AppName already running 

正如你所看到的,前臺請求從不做出。我通過覆蓋UiApplication.activate()方法並放入System.out消息來確認它是否被調用,但它沒有被調用。

有沒有人知道爲什麼會發生這種情況?

+0

你在哪裏打電話requestForeground? – Tamar 2011-12-16 21:01:20

回答

0

嘗試使用此

UiApplication.getUiApplication().invokeAndWait(new Runnable() { 
    public void run() { 
     UiApplication.getUiApplication().requestForeground(); 
    }); 
} 
+0

謝謝,但最終成爲設備本身的問題。代碼很好。 – ruiseal 2011-12-23 11:18:22