获取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);
}
}
按照示例 2 进行操作,但它没有静态访问 MyApplication
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
MyApplication application = (MyApplication) context.getApplicationContext();
}
}
如果您仅需要应用程序的实例,我会推荐方法 3。
如果您的 Application 类中有其他方法,我会推荐方法 1,因为您可以更清楚地执行
MyApplication.getInstance().foo();
方法2只是方法3的捷径,所以我不推荐它。
总而言之,这是一个偏好问题。没有一种“正确”的方法,因为它们都会起作用。
(getActivity().getApplication() as MyApplication)
这将返回 MyApplication 的实例