如何在黑莓应用程序中设置备用入口点?

Posted

技术标签:

【中文标题】如何在黑莓应用程序中设置备用入口点?【英文标题】:How to setup alternate entry point in Blackberry application? 【发布时间】:2011-04-24 16:14:16 【问题描述】:

如何在黑莓应用程序中设置备用入口点。将有 2 个应用程序

    UI 应用程序 后台应用程序:将在自动启动时运行。

有一个关于这个的blackberry knowledge center article,我试过了,编码如下。但是点击应用程序图标,没有任何反应。

class EntryPointForApplication extends UiApplication 
    public EntryPointForApplication()  
        GUIApplication scr = new GUIApplication(); 
        pushScreen(scr);         
     

    public static void main(String[] args)  

        if ( args != null && args.length > 0 && args[0].equals("background1") )
            // Keep this instance around for rendering
            // Notification dialogs.
            BackgroundApplication backApp=new BackgroundApplication();
            backApp.enterEventDispatcher();
            backApp.setupBackgroundApplication();   

        else        
        // Start a new app instance for GUI operations.     
         EntryPointForApplication application = new EntryPointForApplication(); 
           application.enterEventDispatcher();         
               
       

类 UI 应用程序

class GUIApplication extends MainScreen    
    public GUIApplication()        
        add(new LabelField("Hello World"));             
     

后台应用

class BackgroundApplication extends Application    
    public BackgroundApplication() 
        // TODO Auto-generated constructor stub
    
    public void setupBackgroundApplication()

       

我根据这个(edit) bad-link配置了Blackberry_App_Discriptor.xml 任何机构都可以帮忙,哪里出了问题。

【问题讨论】:

顺便说一句,底部的第二个链接与第一个链接的 URL 完全相同 【参考方案1】:

尝试记录 args 的值和(如果不是 null)args[0] 以查看实际传递给 main() 的内容。后台模块未传递参数(或未传递正确的值)可能是您的编译过程存在问题。

另外,尝试将您的 EntryPointForApplication 实例保存到一个静态变量中,以便它维护一个引用(不是垃圾收集),这样如果在它已经运行时从主屏幕再次单击该图标,您不会启动应用程序的多个实例。例如:

class EntryPointForApplication extends UiApplication 

    private static EntryPointForApplication theApp;

    public EntryPointForApplication()  
        GUIApplication scr = new GUIApplication(); 
        pushScreen(scr);         
     

    public static void main(String[] args)  

        if ( args != null && args.length > 0 && args[0].equals("background1") )
            // Keep this instance around for rendering
            // Notification dialogs.
            BackgroundApplication backApp=new BackgroundApplication();
            backApp.setupBackgroundApplication();   
            backApp.enterEventDispatcher();
        else        
         if (theApp == null) 
             // Start a new app instance for GUI operations.     
             theApp = new EntryPointForApplication();
             theApp.enterEventDispatcher();         
          
               
       

【讨论】:

Application.enterEventDispatcher() “正常情况下”不会返回,所以:backApp.setupBackgroundApplication(); backApp.enterEventDispatcher();是此解决方案的正确顺序。 +1 让两个不同的应用程序(BackgroundApplication、EntryPointForApplication)只用一个鳕鱼就可以运行的好方法。大多数示例为每个入口点注册一个相同类的应用程序。我将尝试在每个接口上实现不同的接口(PushApplication、GlobalEventListener)。 @Marc,静态变量 theApp 在这里完全没用。 BB 中的静态对象仅限于进程 - 它们不在不同的应用程序实例之间共享。 main 方法对每个应用实例只运行一次,因此检查 theApp 是否为 null 将始终成功。

以上是关于如何在黑莓应用程序中设置备用入口点?的主要内容,如果未能解决你的问题,请参考以下文章

如何在黑莓手机中测试黑莓应用程序

如何在黑莓中实现搜索功能?

如何防止应用程序在黑莓中启动

如何在黑莓应用程序中使用软键?

如何在黑莓应用程序文本字段中启用自动大写、标点、文本功能?

如何在黑莓中裁剪具有特定形状的图像?