我需要从一个A
不扩展任何东西的抽象类中获取对共享首选项的引用。
我无法将Context
对象传递给此类以获取共享首选项,因为是抽象的,我不实例化它。我创建了A
由共享单个属性的其他 POJO 扩展的类,即uuid
. UUID 在应用程序第一次运行时生成一次,这就是我将它存储在共享首选项中的原因。在 classA
的构造函数中,我希望uuid
根据共享首选项中的内容进行设置。
public abstract class A {
private String uuid;
public A() {
// this is how I'm hoping to use the shared preferences
this.uuid = sharedPrefs.getString("KEY_UUID", "null");
}
// getter and setter
}
我发现的一个建议是扩展Application
,比如说在一个名为 的类中,并在清单的标签中App
包含一个属性。我想会这样写:android:name=".App"
<application>
App
public class App extends Application {
private static App app;
public void onCreate() {
this.app = this;
}
public static App getApp() {
return app;
}
}
...所以在课堂A
上,我可以这样做:
this.uuid = App.getApp().getSharedPreferences("prefs_name.txt", Context.MODE_PRIVATE).getString("KEY_UUID", "null");
但是,当 Android 终止进程或手机重新启动时,非最终静态字段是否app
会失去对 的引用并变为 null ?App
如何在不使用此方法的情况下获得对共享首选项的引用?还是我应该手动将 UUID 写入文件?