Должен ли я создавать новую переменную Facebook для каждого действия или использовать статическую переменную Facebook - PullRequest
0 голосов
/ 12 июня 2011

Я создал абстрактный класс FbActivity, который расширяет Activity для подключения к Facebook с помощью Facebook SDK для Android. Примерно так:

public abstract class FbActivity extends Activity {
  private static final String APP_ID = "xxxxxxxxxxxxx";

  protected Facebook          mFacebook;

  /*
   * Override onCreate to connect to facebook.
   */
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mFacebook = new Facebook(APP_ID);
    setFbConnection();
  }

Хочу ли я, чтобы каждый FbActivity создавал свою собственную переменную Facebook, или я должен сделать переменную Facebook static, чтобы для всего приложения была только одна переменная? Или, возможно, мне следует использовать тип установки singleton, подобный следующему ...

  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (mFacebook == null) {
      mFacebook = new Facebook(APP_ID);
    }
    setFbConnection();
  }

Если у вас нет ответа на этот точный вопрос, абстрагируйтесь от переменной Facebook. Когда «лучше» иметь статическую переменную (особенно в таких ситуациях наследования)?

1 Ответ

1 голос
/ 12 июня 2011

Использование только одного одноэлементного объекта для хранения данных (очевидно) требует меньше памяти, чем использование нескольких не-одноэлементных переменных.Однако доступ к статическому синглтону должен быть синхронизирован во избежание проблем с потоками, что делает его доступ немного медленнее.Другим профессионалом для одиночных игр может быть то, что их проще использовать в вашем коде (нет ссылок на переменные, которые должны быть переданы), но статика в целом может привести к уродливым практикам кодирования.

В вашем случае я бы использовалсам синглтон, в основном для ограничения количества соединений.Но учтите, что использование синглетонов - это вопрос личных предпочтений.Взгляните на этот пост для подробного обсуждения этого вопроса.

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