Search code examples
androidhelperconventions

Is there any convention for a helper class in Android?


For every Activity I add to my app I'm noticing a lot of similar code being used in the initialization of the Activity. A helper class with a static method to wrap this similar code seems the way to go.

I first thought of a singleton class. I could add static methods/variables and use them across the application. I haven't really tried to see how would this work in an Android application. Searching a little bit more I saw something about creating a class extending Application. For this I did a simple test:

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

This works exactly as I expected. Is this the way to go on Android or is there a better convention? Anything else I should consider when doing this?

By the way, should I use the final keyword on the string? What about the method?

EDIT: I just read this:

There is normally no need to subclass Application. In most situation, static singletons can provide the same functionality in a more modular way. If your singleton needs a global context (for example to register broadcast receivers), the function to retrieve it can be given a Context which internally uses Context.getApplicationContext() when first constructing the singleton.

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

Should I use a singleton then?


Solution

  • Application is primarily used for a global application initialization. You would create your own class, override Application.onCreate() and initialize your static application data there.

    Dont forget to declare it in the AndroidMainfest.xml:

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

    A static helper class is made the way you did.
    The convention is to use lower case letter at first position, so MyApp.showToast(...).

    You would use final for the String if you would want to avoid madifications on other places (since it should be a contant).

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