Android - "扩展应用程序"和单例和成员变量

时间:2016-08-04 01:54:45

标签: java android android-asynctask android-applicationinfo

这是一个困扰我的问题,我想得到答案。

我们扩展了应用程序,并且类具有可从应用程序的不同区域访问的变量。我认为这是为了获得单例实现。该应用程序具有不同类的成员对象。

public class DataApplication extends Application{
public InfoHelper mInfoHelper;

public void setHelper (InfoHelper infoHelper) {
  mInfoHelper = infoHelper;
 }

public InfoHelper getInfoHelper() {
        if (mInfoHelper == null){
            mInfoHelper = new InfoHelper();
        } 
        return mInfoHelper;

}

// InfoHelper类

public class InfoHelper{
   public int trial = 10;
}

现在在AsyncTask中(从活动A开始)更新trial变量的值,如下所示,

mDataApplication = (DataApplication) ((FragmentActivity)context).getApplication();

InfoHelper infoHelper = mDataApplication.getInfoHelper();

infoHelper.trial = 200;

当AsyncTask完成后,在Activity-A中,我检查使用的trial变量的值和在调用AsycTask之前创建的InfoHelper变量,

//在AsyncTask启动之前,在Activiy-A的onCreate()中创建以下内容。

mInfoHelper = mScanApplication.getInfoHelper();

// Asyctask完成后,我会检查试验的价值。

Log.d(TAG, "Test Value 1 --- "+ mInfoHelper.trial);
Log.d(TAG, "Test Value 2--- "+ mDataApplication.getInfoHelper().trial);

结果是, 测试值1 --- 10 测试值2 --- 200

我期待第一个Log语句的第一个结果,但我没想到第二个日志语句会给我更新结果。那是怎么发生的?在AsyncTask中更新时,我创建了一个InfoHelper对象并更新了该对象。它怎么会到处反映出来。我的朋友说,这是因为它是对象的相同引用,如果我们创建InfoHelper的对象并不重要,因为它是相同的内存位置,如果这是真的那么问题就是为什么第一个Log语句向我展示了旧的价值?

我的基本面在这方面很弱,我很感激可能有助于我变得更好。

注意:如果我在打印之前再次创建mInfoHelper对象,我会得到我期望发生的更新值。

mInfoHelper = mScanApplication.getInfoHelper();
Log.d(TAG, "Test Value 1 --- "+ mInfoHelper.trial);

结果是, 测试值1 --- 200

0 个答案:

没有答案