Java Blackberry - 分配UiApplication.getUiApplication()

时间:2012-03-22 16:16:31

标签: java blackberry

我有一个多次引用UiApplication.getUiApplication()的类,将它分配给如下所示的实例会有任何性能优势:

private UiApplication _uiApplication;

public MyClass()
{
     _uiApplication = UiApplication.getUiApplication();
}

或者每次需要时都调用UiApplication.getUiApplication()完​​全一样吗?

2 个答案:

答案 0 :(得分:2)

这实际上取决于你在做什么。在一个非常简单的应用程序中,(或者更容易理解的形式)将按预期工作,并且可能稍微更高效:

public class MyClass extends UiApplication {
  private MyClass _myClass;
  public static void main(String[] args) {
    _myClass = new MyClass();
    _myClass.enterEventDispatcher();
  }
  ...
}

其中_myClass与您示例中的_uiApplication具有相同的用途。

不幸的是,一旦你开始做更复杂的事情,你必须与之交互的UI上下文可能不是与MyClass相关联的UI上下文,并且使用之前缓存的值可能会导致问题。因此,即使在MyClass.getUiApplication()上也建议使用UiApplication.getUiApplication()。

我的博客上有更详细的内容:http://www.hrbuckley.net/2012/03/blackberrry-singletons-application.html

答案 1 :(得分:1)

UiApplication.getUiApplication()从执行调用代码的位置检索UiApplication实例。因此,如果您从应用程序中调用它,它将与使用变量相同。但是如果你是从在另一个应用程序中执行的代码(例如PhoneListener回调中的代码,或其他系统挂钩或备用入口点)中调用它,那么它将返回对该外部应用程序的引用,甚至如果没有GUI应用程序,则返回null。 (请注意如何在BlackBerry项目中编写在其他进程中执行的代码。因此,不要将应用程序上下文 - 执行应用程序与应用程序源代码混淆,后者是BlackBerry工作区内的代码库。)

因此,一般来说,对于在自己的应用程序进程中的常规使用,唯一的性能提升不是进行方法调用,这是一个荒谬的收获(除非你从循环内部调用)。如果有的话,那就是程序员的表现会增加,因为它必须输入更少。