【问题标题】:Is there any convention for a helper class in Android?Android中的助手类有什么约定吗?
【发布时间】:2011-09-21 18:01:59
【问题描述】:

对于我添加到应用程序的每个 Activity,我注意到在 Activity 的初始化中使用了很多类似的代码。一个带有静态方法来包装类似代码的辅助类似乎是可行的方法。

我首先想到的是单例类。我可以添加静态方法/变量并在整个应用程序中使用它们。我还没有真正尝试过这在 Android 应用程序中是如何工作的。再搜索一点,我看到了一些关于创建一个扩展 Application 的类。为此我做了一个简单的测试:

public class MyApp extends Application {
    public static String DEMOTEXT = "WORKING!";

    public static void ShowToast(Context context, String text) {
        Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
    }
}

MyApp.ShowToast(this, MyApp.DEMOTEXT); // Placed on onCreate of some Activity

这完全符合我的预期。这是在 Android 上的方式还是有更好的约定?这样做时我还应该考虑什么?

顺便问一下,我应该在字符串上使用final 关键字吗?方法呢?

编辑:我刚读到这个:

通常不需要子类化应用程序。在大多数情况下, 静态单例可以以更模块化的方式提供相同的功能 方式。如果您的单例需要全局上下文(例如注册 广播接收器),检索它的函数可以给出 上下文在内部使用 Context.getApplicationContext() 时 首先构造单例。

http://developer.android.com/reference/android/app/Application.html

那我应该使用单例吗?

【问题讨论】:

    标签: android helper conventions


    【解决方案1】:

    Application 主要用于全局应用程序初始化。您将创建自己的类,覆盖 Application.onCreate() 并在那里初始化您的静态应用程序数据。

    别忘了在 AndroidMainfest.xml 中声明:

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:name="your.package.path.to.MyApp">
    

    按照您的方式创建一个静态帮助程序类。
    惯例是在第一个位置使用小写字母,所以MyApp.showToast(...)

    如果您想避免在其他地方出现疯狂,您可以使用final 作为字符串(因为它应该是一个常量)。

    // this would allow ...
    public static String DEMOTEXT = "WORKING!";
    
    // ... to do this somewhere else
    MyApp.DEMOTEXT = "NOT WORKING!"
    

    【讨论】:

      【解决方案2】:

      我还没有尝试过,但我认为你应该也可以这样做。

      public class MyActivity extends Activity {
          private static final String DEMOTEXT = "WORKING!";
      
          @Override
          public void onCreate(Bundle bundle) 
          {
              super.onCreate(bundle);
              Toast.makeText(this, DEMOTEXT, Toast.LENGTH_SHORT).show();
          }
      }
      

      现在对于所有需要使用该初始化的活动,只需扩展您的基本活动类即可。

      public class SomeActivity extends MyActivity {
          ...
          // Should display the toast on create
          ...
      }
      

      【讨论】:

      • 我的代码只是一个例子。我不能这样做,因为我的实际方法将有参数并且将取决于实际的 Activity,所以我不能只创建一个这样的基类。
      【解决方案3】:

      是的,只需使用单例。那么在这种情况下,如果您的方法是静态的,您甚至不需要单例。只是一个带有静态方法的类。

      【讨论】:

      • 但是单例也会阻止类被实例化。如果这是必要条件...
      猜你喜欢
      • 2011-05-20
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      • 2011-11-06
      • 1970-01-01
      相关资源
      最近更新 更多