如何在java(CVM PhoneME)中实现单实例应用程序管理器?

时间:2010-05-20 20:12:32

标签: java java-me

我正在为基于CVM PhoneME VM的嵌入式平台开发应用程序管理器。 VM由C ++应用程序启动,该应用程序配置CVM,然后触发VM本身。这个C ++应用程序通过命令行调用,传递主类名和java应用程序的类路径。有一个主java应用程序(让我们称之为管理器),它使用类加载器加载应用程序。我希望这个经理成为一个单实例应用程序,以便它可以跟踪所有正在运行的应用程序。

换句话说:我第一次启动应用程序(例如app1)时,VM将启动,Manager将加载app1。在进一步调用加载其他应用程序(app2,app3等)时,Manager的同一个实例会加载这些应用程序。

经理工作正常,但这不是单一事实。

有可能做我想做的事吗?

我发现了这个: http://www.knowledgesutra.com/forums/topic/59760-how-to-implement-single-instance-application-on-java/

除了应用程序加载部分之外,这几乎和我想要的一样。但是,CVM实现中没有必要的包。

1 个答案:

答案 0 :(得分:1)

有多种方法可以强制执行单个应用程序实例。例如,Firefox使用锁定文件。

我见过的最常见的方法之一是启动“管理器”,但是在启动时,尝试在某个端口上打开一个ServerSocket来监听连接。

如果您无法打开套接字,您就知道自己不是单例实例。因此,不是启动应用程序,而是将 connect 连接到侦听套接字,而是将程序参数发送给它。

如果您成功打开套接字,请在另一个线程上执行要求启动app1的内容,以侦听作为重复实例启动的那些管理器的传入连接。

编辑:这描述了非ME环境中的过程。不是ME开发人员,我无法评论其在手机上的可行性。