【问题标题】:Android & OOP - Global Variables vs Inherited Getters in FragmentsAndroid 和 OOP - 片段中的全局变量与继承的 Getter
【发布时间】:2011-10-26 09:46:59
【问题描述】:

在 Fragment 中,您是否应该在每次需要引用活动时调用 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() 相关;

我已通读Coding for Performance,但看不到任何相关内容。我想要一些关于 OO 本质和性能的反馈(尽管可能可以忽略不计)。

【问题讨论】:

    标签: java android performance oop design-patterns


    【解决方案1】:

    在 Fragment 中,您是否应该在每次需要引用活动时调用 getActivity() 或创建全局变量“mActivity”并使用它。

    致电getActivity()。对于初学者,如果您使用setRetainInstance(true),那么您的替代方法就是错误的——在配置更改后您将指向错误的Activity

    感觉创建一个全局(mActivity)是重复代码并创建一个不需要的额外引用

    绝对的。

    到处使用 getActivity() 看起来很可怕

    当然欢迎您提出意见。

    每次调用多个方法都感觉不对(性能?)

    如果您要在紧密循环中调用它一百万次,请为临时缓存创建一个局部变量。否则,性能损失不应该是重大的。

    或者,换个角度看,如果 Traceview 说您在调用 getActivity() 上花费了太多时间,那就担心吧。

    【讨论】:

    • 现在可以看到 getActivity() 对方向更改的好处。你对 getView() 有什么看法吗? , tbh 现在可能会为它们进行方法调用以保持一致性,感谢您的输入。
    • @Blundell:“你对 getView() 有什么看法吗?” -- 通常,我使用内置方法,除非我有明确且当前的理由不这样做(例如,百万次循环)。
    • '否则,性能损失不应该是实质性的。'就是这样!!
    【解决方案2】:

    你知道 GOF(Gang of Four)设计模式吗? 我认为您的问题已经在工厂方法模式中解决了。

    【讨论】:

    • 我认为工厂设计模式与这里无关。你希望传递给工厂的是什么?然后返回应用程序?
    猜你喜欢
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    相关资源
    最近更新 更多