正如标题所示,我怀疑当应用程序启动时调用Application.onCreate()时,我可以将Application实例(当然是单例)保存为静态字段,因此我可以在任何地方获取应用程序上下文我的所有代码,即使我没有活动,片段,视图或其他任何内容。
这似乎很棒,但我也害怕有任何风险吗?
答案 0 :(得分:0)
为什么不从Application
班级获得帮助,
阅读本文> https://developer.android.com/reference/android/app/Application.html
用于维护全局应用程序状态的基类。你可以提供 你自己的实现,通过创建一个子类并指定 此子类的完全限定名称为“android:name”属性 在AndroidManifest.xml的标签中。应用程序 class,或Application类的子类,实例化 在您的应用程序/包的进程之前的任何其他类之前 已创建。
注意:通常不需要子类Application。多数情况 在这种情况下,静态单例可以提供相同的功能 更模块化的方式。如果你的单身人士需要一个全球背景(为 注册广播接收器的例子),包括 Context.getApplicationContext()作为调用时的Context参数 你的单身人士的getInstance()方法。
您可以通过保持Base类来维护全局应用程序状态来实现这一点,在我的示例中使用Application对象作为单例对象
public class MyApplication extends Application {
private static MyApplication singleton;
public static MyApplication getInstance() {
return singleton;
}
@Override
public void onCreate() {
super.onCreate();
singleton = this;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
@Override
public void onLowMemory() {
super.onLowMemory();
}
@Override
public void onTerminate() {
super.onTerminate();
}
}
在AndroidManifest
中指定在应用标记
android:name
<application android:icon="@drawable/icon" android:label="@string/app_name" android:name="MyApplication">
现在您可以在任何地方访问此内容,例如
MyApplication mApplication = (MyApplication)getApplicationContext();