3

我有一个父活动和一个扩展父活动的子活动。当父母启动子活动时,

哪个 onCreate 首先执行?孩子的还是父母的?

我在 Child 活动的 onCreate 方法中设置了一个特定变量,现在,看起来需要一段时间才能到达 Child 活动的 onCreate,因此 Parent 中的方法报告一个空变量。而当我让父级睡眠一段时间时,它会报告正确的变量。

谢谢克里斯

家长活动:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.mylayout);

    goButton = (ImageButton) this.findViewById(R.id.goButton);
    goButton.setOnClickListener(new OnClickListener() {
        public void onClick(View view) {

            Intent childIntent = new Intent("com.example.Child");

            String newValue = "Child Value";
            Bundle bun = new Bundle();
            bun.putString("value", newValue); // add two parameters: a string and a boolean
            childIntent.putExtras(bun);
            startActivity(childIntent);
        }
    });

    this.doTheWork("Parent Value");
}

private void doTheWork(String value) {
    new MyNewThread(value).start();
}


public String getTheValue(String value) {
    return "My Value is: " + value;
}

private class MyNewThread extends Thread {
    String value;
    public LoadThread(String v) {
        this.value = v;
    }
    @Override
    public void run() {
        String str = getTheValue(this.value);
    }
}

儿童活动:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Bundle bun = getIntent().getExtras();
    childValue = bun.getString("value");
}

public String getTheValue(String value) {

    return "My Value is: " + value;
}

所以,基本上,即使在父启动子之后,它仍然返回“父值”,但是当我让线程休眠时,它返回“子值”。

4

2 回答 2

2

首先调用扩展类的方法(子类),但之后立即调用超类的方法,因为子类方法的第一行是

儿童活动

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

这是对超类的 onCreate 方法的显式调用。

于 2013-12-18T16:45:51.420 回答
0

关于序列的第一个答案。第一个是调用父母,下一个是孩子。您可以从源代码中读取此信息。

下一个信息是关于为什么您在使用睡眠时会得到不同的结果。首先,Child Activiry onCreate 的代码没有完成,因为没有显示您如何使用字段(或局部变量)childValue。但我希望您也在子对象中创建新线程。请记住,线程不是在您创建线程的那一刻运行,而是在运行时为此找到时间的那一刻。sleep 方法通知运行时您可以运行线程,因为您的主线程正在休眠,这是不同结果的原因。重要的是您正在创建两个线程,一个在子线程中,一个在父线程中。

于 2010-07-02T09:59:45.160 回答