在android中获取Application实例的正确方法

Ole*_*rmy 9 android applicationcontext

以下哪种方式更适合获取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();
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  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);
        }
    } 
    
    Run Code Online (Sandbox Code Playgroud)

cri*_*007 5

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

如果您的 Application 类中有其他方法,我会推荐方法 1,因为您可以更清楚地做

MyApplication.getInstance().foo();
Run Code Online (Sandbox Code Playgroud)

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


总而言之,这是一个偏好问题。没有一种“正确”的方式,因为它们都能奏效。