2012-03-22 32 views
0

我有指UiApplication.getUiApplication()類多次,會不會有任何性能優勢在它像下面分配給一個實例:Java的黑莓 - 分配UiApplication.getUiApplication()

private UiApplication _uiApplication; 

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

或者每次調用UiApplication.getUiApplication()時都要求完全一樣?

回答

1

UiApplication.getUiApplication()檢索從那裏調用代碼執行的UIApplication實例。所以如果你從你的應用程序調用它,它將與使用變量相同。但是,如果您是通過在另一個應用程序內部執行的代碼(例如PhoneListener回調或其他某個系統掛鉤中的代碼或其他入口點)調用代碼,那麼它將返回對該外部應用程序的引用,如果沒有GUI應用程序。 (請注意,您可以在BlackBerry項目中編寫代碼,並在其他進程中執行,因此請勿將應用程序上下文(執行應用程序)與您的應用程序源代碼(即BlackBerry工作區內的代碼庫)混淆。因此,一般來說,對於在你自己的應用程序進程中經常使用,唯一的性能增益不會進行方法調用,這是一個可笑的收益(除非你是從循環內部調用)。如果有的話,程序員的表現會因爲輸入較少而增加。

2

這真的取決於你在做什麼。在一個非常簡單的應用做了分配,(或更容易理解的形式)將作爲預期,可能會略微高效:

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

其中_myClass將服務於相同的目的_uiApplication在你的榜樣。

不幸的是,一旦你開始做更復雜的事情,你必須與之交互的UI上下文可能不是與MyClass相關的,並且使用先前緩存的值可能會導致問題。因此,即使通過MyClass.getUiApplication(),也推薦使用UiApplication.getUiApplication()。

我有我的博客上一些細節:http://www.hrbuckley.net/2012/03/blackberrry-singletons-application.html