在 android 中获取应用程序实例的正确方法

Correct way to get the instance of Application in android

下面哪种方式更适合获取Application的实例

  1. 初始化 Application.onCreate() 中的静态字段并提供对其的静态访问

    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. 创建将 Context 作为参数并将该 Context 转换为 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);
        }
    } 
    

如果您需要应用程序实例,我会推荐方法 3。

如果您的应用程序中有其他方法,我会推荐方法 1 class,因为您可以更清楚地做到

MyApplication.getInstance().foo();

方法二只是方法三的捷径,不推荐。


总而言之,这是一个偏好问题。没有一种 "correct" 方法,因为它们都会起作用。

(getActivity().getApplication() instanceOf MyApplication)应该是正确的方法

(getActivity().getApplication() as MyApplication)

这将 return MyApplication

的实例