在 android 中获取应用程序实例的正确方法
Correct way to get the instance of Application in android
下面哪种方式更适合获取Application的实例
初始化 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();
}
}
创建将 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
的实例
下面哪种方式更适合获取Application的实例
初始化 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(); } }
创建将 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
的实例