如何同时运行后台服务应用程序和 UIApplication

Posted

技术标签:

【中文标题】如何同时运行后台服务应用程序和 UIApplication【英文标题】:How can run background service application and UIApplication same time 【发布时间】:2011-04-24 09:42:44 【问题描述】:

我想同时运行后台服务应用程序和 UIApplication。

是否可以在同一个项目中创建两者或需要创建单独的单独项目。

实际上我对如何在事件线程中调用或启动后台服务感到困惑。

【问题讨论】:

【参考方案1】:

您可以通过以下方式为您的应用程序设置备用入口点:

A- 使用 BlackBerry® Java® Plug-in for Eclipse®

为原始应用程序创建项目后,创建一个备用入口点以启动应用程序 UI。

1- 双击项目中的 BlackBerry_App_Descriptor.xml。 2- 勾选系统模块,不要在黑莓主屏幕上显示应用程序图标。 3-单击备用入口点选项卡。 4- 单击添加按钮。 5- 输入入口点的标题,然后单击“确定”。 6- 指定将使用此备用入口点启动应用程序的应用程序参数(例如:gui)。 7- 继续“常用步骤”部分。 8- 修改原项目的main()方法如下:

public static void main(String[] args) 
     if ( args != null && args.length > 0 && args[0].equals("gui") )
          // code to initialize the app
          theApp.enterEventDispatcher();
      else 
          // code to launch the background thread 
     

B- 使用 BlackBerry JDE

为原始应用程序创建项目后,您必须为 UI 入口点创建另一个项目。假设要运行的线程与原始应用程序存在于同一个项目中,请按以下步骤操作:

1- 右键单击​​项目节点并选择属性。 2- 在“属性”窗口中,选择“应用程序”选项卡。 3- 验证是否选中了以下选项:启动时自动运行和系统模块(向系统注册线程)。 4- 在与原始项目相同的文件夹下创建另一个项目。右键单击新项目节点并选择属性。 5- 选择应用程序选项卡,然后从项目类型下拉列表中选择备用 CLDC 应用程序入口点。如附件所示,从 Alternate entry point for 下拉列表中选择原始项目的名称(例如,trafficreporter)。还要指定将使用此备用入口点启动应用程序的参数(例如:gui)。 继续执行通用步骤部分。 6- 修改原项目的main()方法如下:

public static void main(String[] args) 
     if ( args != null && args.length > 0 && args[0].equals("gui") )
          // code to initialize the app
          theApp.enterEventDispatcher();
      else 
          // code to launch the background thread 
     

【讨论】:

感谢 Ashraf,但我想从事件线程调用后台服务。是否可以?如果是,请告诉我怎么做? 使用 UiApplication.requestForeground() .....如果这些答案对您有帮助,请标记并检查为答案 @AshrafBashir。可爱的解释。 @AshrafBashir 谢谢。不错的回答我的应用程序运行良好,但我无法显示应用程序图标?我们怎样才能做到这一点? 我必须运行两个后台应用程序。我应该如何运行?@AshrafBashir【参考方案2】:

http://supportforums.blackberry.com/t5/Java-Development/Background-thread-for-push-notifications/td-p/563071

Blackberry 开发者论坛充满了主题和示例代码来完成这件事。

就个人而言,我使用备用入口点方法,将后台应用程序作为自动启动 UiApplication(没有图标)运行,它从不推送 MainScreen,但使用自己的调度线程抛出对话框或类似通知,然后当实际的主页图标被按下/单击,我启动 Ui 入口点与用户一起玩。

【讨论】:

谢谢 dan,但我想从事件线程调用后台服务。是否可以?如果是,请告诉我怎么做? 有两种方法可以做到这一点---方法1.创建一个包含UI和后台监听器的应用程序,并覆盖close()方法,只在后台运行——它从不调用System.exit() 换句话说。这可以完成所有的处理和 UI,并且元素之间的通信相当简单。实现可能很痛苦,因为您需要在任何地方请求背景。 ---方法2:我使用上述的替代进入方法,并在启动时将我的autorun Singleton监听器(使用RuntimeStore Singleton)的引用传递到UI应用程序中。 嗨,丹,你能展示如何做到这一点的完整代码示例吗?我需要从 UI 应用程序安装服务应用程序,请告诉我该怎么做? 关注我的回答中的主题,它解释了很多理论,并指向其他主题以获得更多示例/理论。我没有时间为任何人复制/粘贴代码,我几乎没有时间在这里 atm 冲浪 :)

以上是关于如何同时运行后台服务应用程序和 UIApplication的主要内容,如果未能解决你的问题,请参考以下文章

手机和电脑的后台程序是否与前台程序同时运行 只是被前台覆盖了

手机和电脑的后台程序是否与前台程序同时运行 只是被前台覆盖了

服务器后台运行程序

如何让android的service一直在后台运行

IOS:后台同时运行应用程序音频和手机音乐音频

如何创建在后台运行的Android服务