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

时间:2016-03-10 20:01:01

标签: java android class object android-studio

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

// A Conn is a connection to a STOMP server. Create a Conn using either
// the Dial or Connect function.
type Conn struct {
    conn         io.ReadWriteCloser
    readCh       chan *frame.Frame
    writeCh      chan writeRequest
    version      Version
    session      string
    server       string
    readTimeout  time.Duration
    writeTimeout time.Duration
    closed       bool
    options      *connOptions
}

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

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

我希望我足够清楚。我很难理解我们何时想要选择其中一种。

2 个答案:

答案 0 :(得分:2)

功能上没什么。

创建Activity对象时会创建第一个(调用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时或之后创建它。

答案 1 :(得分:1)

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

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