你好,我有一个关于在整个应用程序中传递对象的问题。
假设我想在整个应用程序中使用一个大的自定义对象。
这个对象将被多个活动和服务使用。
我最初所做的是:
首先,我创建了一个Application类并定义了一个单例对象。
public class FooApplication extends Application {
public static SharedObj obj;
...
}
其次,在一个活动中,我设置了该对象的值。
public class FooActivity extends Activity {
OnCreate() {
FooApplication.obj = SharedObj.getInstance();
}
}
第三步,我在另一个活动中访问此对象。
public class BarActivity extends Activity {
OnCreate() {
SharedObj useThis = FooApplication.obj;
}
}
我的问题是,这个代码有什么问题吗? 它似乎工作得很好,但我发现有时这个单例对象的值会因某些原因被设置为null。 我之所以像这样共享对象而不是将其变成可包含对象,主要原因是这样做对我来说有点昂贵,而我所做的看起来更容易。有什么缺点吗?
经过一些研究,我发现还有另一种方法可以在整个应用程序中共享对象。
首先,在应用程序类中定义。
public class FooApplication extends Application {
public SharedObj obj = new SharedObj();
...
}
其次,在活动中像这样进行初始化
public class FooActivity extends Activity {
OnCreate() {
FooApplication fooApp = (FooApplication)getApplicationContext();
fooApp.obj = new SharedObj();
}
}
第三步,在另一个活动中,我访问这个对象。
public class BarActivity extends Activity {
OnCreate() {
SharedObj useThis = ((FooApplication)getApplicationContext()).obj;
}
}
使用getapplicationContext()方法与在第一部分中使用单例对象有何不同?这个方法更推荐使用吗?
提前感谢您的帮助!