- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Android 应用程序中使用了一些单例。从我的 onCreate()
中的 GlobalApp
(extends Application
) 类,它们的初始化如下:
public class GlobalApp extends Application{
@Override
public void onCreate() {
super.onCreate();
DatabaseHelper databaseHelper = new DatabaseHelper(getApplicationContext());
MySingleton.init(databaseHelper);
}
}
和单例:
public class MySingleton{
static MySingleton instance;
DatabaseHelper databaseHelper;
public static void init(DatabaseHelper databaseHelper){
instance = new MySingleton(databaseHelper);
}
}
我的应用程序崩溃,这清楚地表明该实例有时在我的应用程序运行时为 null
。最奇怪的事情是:这些崩溃只发生在三星 Galaxy S5 上!
我的理解是
我的 application
类的 onCreate()
方法保证在我的应用程序启动时被调用
单例上的实例永远不会变为 null,除非应用程序完全重新启动(在这种情况下,它应该由我的 application
类重新创建)。
这是怎么回事?
PS:我知道单例有点令人不悦,并且扩展 application
类也不是每个人都推荐的,但这不是重点。
编辑:为了澄清起见,该代码在 99% 的情况下都可以工作。问题不是问如何实现单例模式,而是问我的(或任何)应用程序的生命周期如何导致单例的实例
在它变为null
时在application
的onCreate()
中创建。
最佳答案
我在我的应用程序中使用单例方法,就像我的方式一样,这对我来说效果很好
public class AddEventModel {
private String event_name;
private String event_image;
private static AddEventModel _instance;
//For Single Ton
public static AddEventModel get_instance() {
return _instance;
}
public static AddEventModel getInstance() {
if (_instance == null) {
_instance = new AddEventModel();
}
return _instance;
}
public static void set_instance(AddEventModel _instance) {
AddEventModel._instance = _instance;
}
//Getter setter for model.
public String getEvent_image() {
return event_image;
}
public void setEvent_image(String event_image) {
this.event_image = event_image;
}
public String getEvent_name() {
return event_name;
}
public void setEvent_name(String event_name) {
this.event_name = event_name;
}
要在单例中设置值,我正在执行如下操作,
edtEventName.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//Save edit text value in single ton instance.
AddEventModel.getInstance().setEvent_name(edtEventName.getText().toString().trim());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
从单例中获取值(value),
@Override
public void onResume() {
super.onResume();
// Set same value saved in single ton before in onResume.
edtEventName.setText(AddEventModel.getInstance().getEvent_name());
}
尝试像这样使用单例,希望这对你有帮助。
关于java - 单例 null 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30838465/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!