Java Blackberry - назначение UiApplication.getUiApplication () - PullRequest
0 голосов
/ 22 марта 2012

У меня есть класс, который ссылается на UiApplication.getUiApplication () несколько раз, будет ли какой-либо выигрыш в производительности при назначении его экземпляру, как показано ниже:

private UiApplication _uiApplication;

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

Или вызывает UiApplication.getUiApplication () каждый раз, когда требуется точно такой же?

Ответы [ 2 ]

2 голосов
/ 22 марта 2012

Это действительно зависит от того, что вы делаете. В очень простом приложении выполнение задания (или в более понятной форме) будет работать как положено и может быть несколько более эффективным:

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

где _myClass будет служить той же цели, что и _uiApplication в вашем примере.

К сожалению, как только вы начинаете делать более сложные вещи, контекст пользовательского интерфейса, с которым вы должны взаимодействовать, может не совпадать с контекстом MyClass, и использование значения, кэшированного ранее, может вызвать проблемы. Поэтому использование UiApplication.getUiApplication () рекомендуется даже для MyClass.getUiApplication ().

У меня есть некоторые подробности в моем блоге: http://www.hrbuckley.net/2012/03/blackberrry-singletons-application.html

1 голос
/ 23 марта 2012

UiApplication.getUiApplication() извлекает экземпляр UiApplication, из которого выполняется вызывающий код. Поэтому, если вы вызываете его из своего приложения, оно будет таким же, как использование переменной. Но если вы вызываете его из кода, который выполняется внутри другого приложения (например, кода внутри PhoneListener обратных вызовов, или некоторых других системных хуков, или альтернативных точек входа), то он вернет ссылку на это внешнее приложение или даже ноль, если нет приложения с графическим интерфейсом (Обратите внимание, как вы можете написать в своем проекте BlackBerry код, который выполняется в других процессах. Поэтому не путайте контекст приложения - выполнение приложения - с исходным кодом приложения, который является вашей кодовой базой в рабочем пространстве BlackBerry).

Таким образом, в общем случае для регулярного использования внутри собственного процесса приложения единственным выигрышем в производительности будет отсутствие вызова метода, что является нелепым выигрышем (если только вы не вызывали из цикла). Во всяком случае, производительность программиста возрастает по мере того, как он печатает меньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...