Android & OOP - глобальные переменные и наследуемые геттеры во фрагментах - PullRequest
5 голосов
/ 26 октября 2011

Во фрагменте вы должны вызывать getActivity () каждый раз, когда вам нужна ссылка на действие, или создавать глобальную переменную 'mActivity' и использовать ее.

В основном у вас уже есть объект Activity (getActivity ()) и создается ощущение, что создание глобальной (mActivity) - это дублирование кода и создание дополнительной ссылки, которая не нужна. Но , также использующий getActivity (), везде выглядит ужасно и чувствует себя неправильно при выполнении нескольких вызовов методов каждый раз (производительность?).

 // Pseudo Android
 public class MyFragent extends Fragment {

      private Activity mActivity; // Global

      public void onActivityCreated(Bundle b){

          mActivity = getActivity();

      }

      public void onClick(View v){

         randomMethodTakingActivity(mActivity);
         // or
         randomMethodTakingActivity(getActivity());

      }

      private void someMethod(){
         randomMethodTakingActivity(mActivity);
         // or
         randomMethodTakingActivity(getActivity());
      }

      private void anotherMethod(){
         mActivity.someCallback();
         // or
         getActivity().someCallback();
      }

 }

Это также относится к getApplication () или getView ();

Я прочитал Кодирование для производительности , но не вижу ничего релевантного.Я хотел бы получить некоторые отзывы о природе ОО, а также производительности (хотя, вероятно, незначительным).

Ответы [ 2 ]

6 голосов
/ 26 октября 2011

Во фрагменте вы должны вызывать getActivity () каждый раз, когда вам нужна ссылка на действие, или создавать глобальную переменную 'mActivity' и использовать это.

Call getActivity().Для начала, если вы используете setRetainInstance(true), ваш альтернативный подход просто неверен - вы будете указывать на неправильный Activity после изменения конфигурации.

похоже на создание глобального (mActivity) - это дублирование кода и создание дополнительной ссылки, которая не нужна

Абсолютно.

с использованием getActivity () везде выглядит ужасно

Выбезусловно, добро пожаловать в ваше мнение.

чувствует себя неправильно при выполнении нескольких вызовов метода каждый раз (производительность?)

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

Или, если посмотреть на это с другой стороны, если Traceview говорит, что вы слишком много времени тратите на вызов getActivity(), тогда беспокойтесь об этом.

0 голосов
/ 26 октября 2011

Знаете ли вы о GOF (Gang of Four) Design pattern?Я думаю, что ваша проблема решена уже в Фабрике метода Pattern.

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