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生命周期如下: