BlackBerry - 无法将正在运行的应用程序置于前台

Posted

技术标签:

【中文标题】BlackBerry - 无法将正在运行的应用程序置于前台【英文标题】:BlackBerry - Can't foreground a running application 【发布时间】:2011-12-16 16:13:20 【问题描述】:

我有一个设置为在启动时自动运行的 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 消息来确认它是否被调用但没有被调用。

有人知道为什么会这样吗?

【问题讨论】:

你在哪里调用 requestForeground? 【参考方案1】:

试试这个

UiApplication.getUiApplication().invokeAndWait(new Runnable() 
    public void run() 
        UiApplication.getUiApplication().requestForeground();
    );

【讨论】:

谢谢,但最终成为设备本身的问题。代码很好。

以上是关于BlackBerry - 无法将正在运行的应用程序置于前台的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Blackberry 应用程序中创建文本输入

黑莓中的推送消息监听器

如何在后台运行黑莓应用程序

iPhone、Android 和 Blackberry 的移动开发

无法在服务器上发送推送消息(黑莓 - Android 运行时)

IBM Worklight 6.0 - BlackBerry 10 中的 window.open() 失败