我正致力于处理多入口点方法的UI应用程序。
我指的是link并尝试制作演示版。 这是代码: -
public class DemoApp extends UiApplication implements RealtimeClockListener
{
private static DemoApp dmMain ;
private static final long dm_APP_ID = 0x6ef4b845de59ecf9L;
private static DemoApp getDemoApp()
{
if(dmMain == null)
{
RuntimeStore dmAppStore = RuntimeStore.getRuntimeStore();
dmMain = (DemoApp)dmAppStore.get(dm_APP_ID);
}
return dmMain;
}
private static void setDemoApp(DemoApp demoAppMain)
{
RuntimeStore dmAppStore = RuntimeStore.getRuntimeStore();
dmAppStore.remove(dm_APP_ID);
dmAppStore.put(dm_APP_ID, demoAppMain);
}
public static void main(String[] args)
{
Log.d(" Application argument "+args);
if( args.length > 0 && args[ 0 ].equals( "Demo_Alternate" ) )
{
Log.d("Running Demo_Alternate #### Running Demo_Alternate #### Running Demo_Alternate");
dmMain = new DemoApp();
dmMain.enterEventDispatcher();
setDemoApp(dmMain);
}
else
{
Log.d("Running Demo #### Running Demo #### Running Demo #### Running Demo");
getDemoApp().initializeMain();
}
}
public DemoApp()
{
this.addRealtimeClockListener(this);
}
private void initializeMain()
{
UiApplication.getUiApplication().invokeLater(new Runnable()
{
public void run()
{
try
{
pushScreen(new DemoMainScreen());
} catch (Exception e)
{
Log.e(e.toString());
}
}
});
}
public void clockUpdated()
{
showMessage("DemoAppClock Updated");
Log.d("DemoAppClock Updated #### DemoAppClock Updated #### DemoAppClock Updated");
}
private void showMessage(String message)
{
synchronized (Application.getEventLock())
{
Dialog dlg = new Dialog(Dialog.D_OK, message, Dialog.OK, null, Manager.FIELD_HCENTER);
Ui.getUiEngine().pushGlobalScreen(dlg, 1, UiEngine.GLOBAL_QUEUE);
}
}
}
: - 我创建了一个名为 Demo_Alternate 的备用入口点,它在启动时运行。
: - 如果应用程序具有单独的入口点,则意味着单独的过程link
现在我的问题是: -
答案 0 :(得分:1)
只是简单地看一下这段代码,但在这里看到一个明显的问题:
dmMain.enterEventDispatcher();
setDemoApp(dmMain);
enterEventDispatcher永远不会返回,因此您永远不会将您的Application实例放在RuntimeStore中。
我建议您查看以下知识库文章,您可能会发现其访问RuntimeStore维护对象的方法更易于使用。或者不是。
<强>更新强>
如果此解决方案不起作用,请使用更正后的代码更新原始帖子。
答案 1 :(得分:0)
我当然同意彼得的意见,即在 setDemoApp(dmMain)
之后调用enterEventDispatcher()
意味着它不会被调用。
那就是说,我认为你在这里有一个更基本的误解。
使用备用切入点会创建多个流程。 See here for more。
但是,你说你不想要单独的进程。你能告诉我们为什么不?
例如,旨在协同工作的单独BlackBerry流程仍可以共享数据using the RuntimeStore。
也许你可以告诉我们更多关于你的“Demo”和“Demo Alternate”应该做什么。