Correct way to get the instance of Application in android

Olegvarmy picture Olegvarmy · Mar 3, 2016 · Viewed 7.6k times · Source

Which of these ways is more proper for getting the instance of Application

  1. Initialise static field in Application.onCreate() and provide static access to it

    public class MyApplication extends Application {
    
        private static MyApplication sInstance;
    
        @Override
        public void onCreate() {
            super.onCreate();
            sInstance = this;
        }
    
        public static MyApplication getInstance() {
            return MyApplication.sInstance;
        }
    }
    
    public class MyBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            MyApplication application = MyApplication.getInstance();
        }
    }
    
  2. Create static method which takes Context as param and cast that Context to MyApplication

    public class MyApplication extends Application {
    
        @Override
        public void onCreate() {
            super.onCreate();
        }
    
        public static MyApplication getInstance(Context context) {
            return ((MyApplication) context.getApplicationContext());
        }
    }
    
    public class MyBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            MyApplication application = MyApplication.getInstance(context);
        }
    } 
    

Answer

OneCricketeer picture OneCricketeer · Mar 3, 2016

I would recommend method 3 if you only need the instance of the Application.

I would recommend method 1 if you had additional methods in your Application class because you can more clearly do

MyApplication.getInstance().foo();

Method 2 is just a shortcut for method 3, so I wouldn't recommend it.


All in all, it's a matter of preference. There is no one "correct" way because they'll all work.