繁体   English   中英

onCreate与声明期间的成员对象实例化

[英]Member object instantiation in onCreate vs. during declaration

我基本上是在询问这两种方法之间的区别:

public class myClass extends AppCompatActivity {
    private objectType mObject = new objectType();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //do stuff with mObject

public class myClass extends AppCompatActivity {
    private objectType mObject;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        mObject = new ObjectType();

我希望我足够清楚。 当我们想要选择一个与另一个时,我很难理解。

功能上没什么。

创建Activity对象时将创建第一个new myClass()调用new myClass() )。 Android系统在创建期间的某个时刻执行此操作。

当系统最终调用onCreate()时,将创建第二个。

如果你有一个在构造函数中需要Context的对象,那就是问题。 你可以这样做:

public class myClass extends AppCompatActivity {
    private objectType object = new objectType(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //do stuff with object

应用程序将突然崩溃,因为您很可能会尝试从尚不存在的Context中提取资源。 (请记住,此时不会创建活动)。

因此,如果您的对象必须使用Context ,则必须在调用onCreate时或之后创建它。

正如您可能知道的,Activity具有明确定义的生命周期。 如果你在构造函数和onCreate中创建新实例并不总是重要,但在这些情况下你肯定更喜欢onCreate:

  1. 如果新对象需要有效的Context,则在onCreate()之前不可用。 您不能在构造函数中执行此操作。
  2. 如果您希望在不再需要资源时主动释放资源,onDestroy就活动生命周期提供了与onCreate相似的模拟。 这可以帮助回收对象比在构造函数中创建它们并将其存储为“final”时更快。 虽然这不是绝对必要的,但它使读者清楚地知道您希望在Activity的生命周期之后继续工作,而不仅仅是对象实例本身。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM