Android 应用程序仍在运行时是否可以重新创建应用程序对象?

Android 应用程序仍在运行时是否可以重新创建应用程序对象?,android,android-lifecycle,Android,Android Lifecycle,我将Application对象扩展为MyApplication,设计如下 公共类MyApplication扩展应用程序{ 私有MyObject MyObject; 公共应用程序(){ mInstance=这个; } 公共静态MyApplication getInstance(){ 回报率; } 公共MyObject getMyObject(){ 返回myObject; } 公共setMyObject(MyObject对象){ myObject=对象; } }您不希望使用公共构造函数,而是使用o

我将
Application
对象扩展为
MyApplication
,设计如下

公共类MyApplication扩展应用程序{
私有MyObject MyObject;
公共应用程序(){
mInstance=这个;
}
公共静态MyApplication getInstance(){
回报率;
}
公共MyObject getMyObject(){
返回myObject;
}
公共setMyObject(MyObject对象){
myObject=对象;
}

}
您不希望使用公共构造函数,而是使用onCreate()方法。 您还需要该类的静态实例

public class MyApplication extends Application {

  private MyObject myObject;
  private static MyApplication mInstance;

  @Override
  public void onCreate() {
    super.onCreate();
    mInstance = this;
  }

  public static MyApplication getInstance() {
    return mInstance;
  }

  public MyObject getMyObject(){
    return myObject;
  }

  public setMyObject(MyObject object){
    myObject = object;
  }
}
当然,更改您的清单,告诉您这是将处理应用程序的类(如果尚未完成)


不要在应用程序对象中存储数据 应用程序对象将不会永远留在内存中。当用户通过按下home(主页)按钮等方式将应用程序发送到后台时,如果系统需要内存,应用程序对象可能会被杀死。这可能在几分钟后发生,但可能需要几个小时。当用户随后恢复应用程序时,应用程序对象可能与以前不同,如果没有初始值,
mMyObject
将为
null

解决 进行
null
检查并采取相应措施

使用某种形式的

在应用程序构造函数中初始化对象

public MyApplication () {
    mInstance = this;
    mMyObject = new MyObject()
}

也许您在设置对象之前获取了对象!事实并非如此,尽管我没有提到myObject已经初始化,如果它为null,则第一个myApp.getMyObject()不应打印null。初始化myObject的代码在哪里?它发生在打开活动之前,在我尝试访问之前,我可以确认
myObject
已正确初始化且不为空。XML已经存在,是的,我认为构造函数不正确,它应该是
public MyApplication(){super();mInstance=this;}
,但是如果我将其移动到onCreate(),这有什么关系,无论是哪种情况,
的值都不应更改。此外,如果存在一些赋值问题,它应该每次都失败。基本上,您不需要构造函数,因为将由系统调用
onCreate
方法来创建此对象。因此,这就是您需要保留实例的地方(
mInstance=this
)。如果您需要设置对象,只需调用
MyApplication.getInstance().setMyObject()
,同样可以检索它。这样,MinInstance在应用程序的整个生命周期内都是唯一和一致的。是的,我计划将其移动到onCreate(),但是从日志中我看到有两个Application object实例,这可能吗?是和否。我想这里发生的事是系统创建的“正常”实例,另一个作为对象。由于它们是不同的,并且您只在其中一个(显然是您存储的那个)中设置了MyObject,那么它就不会有空的MyObject,而应用程序创建的那个将有空的MyObject。为了使它更简单,您正在处理2个MyApplication对象,一个处理您的应用程序,另一个作为简单对象,但我不想通过显式调用
new MyApplication()
来创建
MyApplication
的实例,我只是在构造函数中保留了一个静态引用,在操作系统创建对象时会调用它。谢谢,我知道这一点,并计划将对象从应用程序中移除,但替换它需要时间,因此,我正在寻找一个实习生解决方案来处理它,并回答应用程序对象的异常行为。如果需要快速修复,请使用空指针检查(无论如何都应该这样做)或在
MyApplication
construktor中初始化
myObject
public MyApplication () {
    mInstance = this;
    mMyObject = new MyObject()
}