Android Parent and Child Activity onCreate вопрос - PullRequest
3 голосов
/ 02 июля 2010

У меня есть родительское действие и дочернее действие, которое расширяет родительское действие. Когда родитель начинает дочернюю деятельность,

Какой onCreate выполняется первым? Ребенок или родитель?

Существует определенная переменная, которую я устанавливаю в методе onCreate дочернего действия, и сейчас, похоже, требуется время, чтобы добраться до onCreate дочернего действия, и поэтому методы в Parent сообщают о пустой переменной. Принимая во внимание, что когда я заставляю Родителя спать некоторое время, он сообщает правильную переменную.

Спасибо Chris

Активность родителей:

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;
}

Таким образом, в принципе, даже после того, как Parent запускает Child, он по-прежнему возвращает «Parent Value», но когда у меня спит поток, он возвращает «Child Value».

Ответы [ 2 ]

2 голосов
/ 18 декабря 2013

Метод вашего расширенного класса (дочерний класс) вызывается первым, но метод вашего суперкласса вызывается сразу после первой строки в методе вашего дочернего класса:

Дочерняя активность

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

}

Это явный вызов метода onCreate вашего суперкласса.

0 голосов
/ 02 июля 2010

Первый ответ о последовательности.Первый - это вызов родителя, а следующий - ребенок.Эту информацию вы можете прочитать из своего исходного кода.

Следующая информация о том, почему у вас другой результат при использовании режима сна.Прежде всего, код Child Activiry onCreate не завершен, потому что не показывает, как вы используете поле (или локальную переменную) childValue.Но я ожидаю, что вы также создаете новый поток в дочернем объекте.Помните, что поток запускается не в тот момент, когда вы создаете поток, а в тот момент, когда время выполнения находит для этого время.Метод sleep сообщает среде выполнения, что вы можете запустить поток, потому что ваш основной поток спит, и это является причиной другого результата.Важно то, что вы создаете два потока, один в дочернем и один в родительском.

...