Android。可以在 onCreate() 生命周期方法之外初始化对象吗?
Android. It's okay to init objects outside of onCreate() lifecycle method?
我的项目中有一些工具和工人。所有这些 类 都作为单例工作。假设我有多个使用此对象的活动,但
之间有区别吗
private LocationWorker mLocationWorker;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_daily_forecast);
mLocationWorker = LocationWorker.getInstance();
还有这个?
LocationWorker mLocationWorker = LocationWorker.getInstance()
在 onCreate() 方法之前获取此对象的引用可以吗?
It's okay to get references to this objects before onCreate() method?
是的。
LocationWorker mLocationWorker = LocationWorker.getInstance();
应该可以正常工作。
但是,由于它是一个单例,我不确定在字段中保存对它的引用是否有意义。你可以这样做
LocationWorker.getInstance()
随时需要。
我通常更喜欢第一种方法
private LocationWorker mLocationWorker;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_daily_forecast);
mLocationWorker = LocationWorker.getInstance();
因为只有在需要的时候才会创建对象。在第二种方法中,您正在创建一个单例对象。该对象甚至在需要之前就占用了内存。我更喜欢第一种方法的一些情况是:
- 如果同一个对象会被activity的不同部分使用。
因此,您不想每次在使用前都检查 null 想要一个
干净的代码,你想要更干净的代码。
- 如果 class 有一个公共对象,则不会
彻底改变。通常你把它设为静态。很好的例子是:
字符串 LOG_TAG = MyActivity.class.getSimpleName();
- 如果该对象将在您的activity中频繁使用。对于 activity
与服务器进行频繁通信的,例如,您
应该创建进行通信的 class 的对象
这边走。附加示例是
如果对象将在class的某个部分使用,您应该考虑在class中声明它。
只要LocationWorker.getInstance();是单例对象,我们应该好好的。 class 级别中声明的变量不依赖于这些方法。就像任何其他 java class 一样,变量的范围可用于整个 class(从 OnStart 到 OnDestroy )。可以使用 onResume() 或 onStart() 方法重置这些变量。
Activity生命周期如下:
我的项目中有一些工具和工人。所有这些 类 都作为单例工作。假设我有多个使用此对象的活动,但
之间有区别吗private LocationWorker mLocationWorker;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_daily_forecast);
mLocationWorker = LocationWorker.getInstance();
还有这个?
LocationWorker mLocationWorker = LocationWorker.getInstance()
在 onCreate() 方法之前获取此对象的引用可以吗?
It's okay to get references to this objects before onCreate() method?
是的。
LocationWorker mLocationWorker = LocationWorker.getInstance();
应该可以正常工作。
但是,由于它是一个单例,我不确定在字段中保存对它的引用是否有意义。你可以这样做
LocationWorker.getInstance()
随时需要。
我通常更喜欢第一种方法
private LocationWorker mLocationWorker;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_daily_forecast);
mLocationWorker = LocationWorker.getInstance();
因为只有在需要的时候才会创建对象。在第二种方法中,您正在创建一个单例对象。该对象甚至在需要之前就占用了内存。我更喜欢第一种方法的一些情况是:
- 如果同一个对象会被activity的不同部分使用。 因此,您不想每次在使用前都检查 null 想要一个 干净的代码,你想要更干净的代码。
- 如果 class 有一个公共对象,则不会 彻底改变。通常你把它设为静态。很好的例子是: 字符串 LOG_TAG = MyActivity.class.getSimpleName();
- 如果该对象将在您的activity中频繁使用。对于 activity 与服务器进行频繁通信的,例如,您 应该创建进行通信的 class 的对象 这边走。附加示例是
如果对象将在class的某个部分使用,您应该考虑在class中声明它。
只要LocationWorker.getInstance();是单例对象,我们应该好好的。 class 级别中声明的变量不依赖于这些方法。就像任何其他 java class 一样,变量的范围可用于整个 class(从 OnStart 到 OnDestroy )。可以使用 onResume() 或 onStart() 方法重置这些变量。
Activity生命周期如下: