【问题标题】:Where to define custom methods在哪里定义自定义方法
【发布时间】:2014-02-02 23:46:25
【问题描述】:

假设myFunction() 用于MainActivityMyBroadcastReceiver 类。现在,我只是将 myFunction 设置为 MainActivity 中的 public static 方法,所以在 MyBroadcastReceiver 中我只是将该函数称为 MainActivity.myfunction()。我不确定这是否是一种公认​​的做法,我希望有人能给我一些启示。

【问题讨论】:

    标签: java android


    【解决方案1】:

    这可能取决于所讨论的方法的作用。

    如果它是一个可以是静态的简单帮助器类型方法,您可以在任何地方创建它,但为这些方法创建一个单独的帮助器类将帮助您保持代码整洁。

    您还可以创建自定义应用程序类并将您的方法放入其中。您可以轻松访问应用程序类并从那里使用它。

    要记住的一点是,您需要小心不要泄漏内存,尤其是当您将Context 对象传递给此类方法时。你可以传递上下文,但要小心你用它做什么。如果你只是在静态方法中使用它,那没关系。如果将其分配给另一个静态变量,则可能会发生内存泄漏。

    【讨论】:

    • 你能扩展最后一部分,内存问题吗? Android 中的方法依赖于特定的上下文并且我必须将其作为参数传递这一事实使得创建一个单独的类有点烦人。
    • 你可以传递上下文,但要小心你用它做什么。如果你只是在静态方法中使用它,那没关系。如果将其分配给另一个静态变量,则可能会发生内存泄漏。
    【解决方案2】:

    我认为这不是正确的方法。不过,这取决于哪些资源使用您的 myFunction() 方法。如果您不使用某些特定的 MyActivity 实例并且您会说它是一个“独立”方法,我会在这样的单例中声明它:

    public class YourPublicFunctions extends Application {
      private static Context context;     // Just if needed
    
      // Just if needed
      public void onCreate(){
        super.onCreate();
        YourPublicFunctions.context = getApplicationContext();
      }  
    
      public int myFunction() {
        ...
      }
    }
    

    因此,要这样称呼它,您可以使用:

    YourPublicFunctions myfuncs = ((YourPublicFunctions) getApplicationContext());
    int value = myfuncs.myFunction();
    

    注意:这种方法是内存泄漏安全的。

    【讨论】:

    • context 不应为 staticstackoverflow.com/questions/4869004/…
    • 确实应该,您提供的示例不适合我的示例代码,因为它扩展了Application - 这里没有内存泄漏。
    • 这与泄漏无关,这是一个通用的事情,您不应该从实例中更改静态状态。更干净的代码,产生更多错误代码的可能性更小,即外部的东西开始以静态方式访问Application
    【解决方案3】:

    我想说,从严格的 OOP 方法来看,它完全取决于两个类交互的上下文。

    我能想到三种方法:

    1. myFunction() 属于第三类

      public class Communicator
      {
           public static myFunction()
           {
      
           }
      }
      Communicator.myFunction();
      
    2. myFunction() 被继承

       public MainActivity extends Communicator
       {}
       public MyBroadcastReceiver extends Communicator
       {}
       myFunction();
      
    3. myFunction() 属于其中一个类

      <Your implementation>
      

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多