3

親アクティビティと、親アクティビティを拡張する子アクティビティがあります。親が子の活動を開始すると、

どのonCreateが最初に実行されますか?子供ですか、それとも親ですか?

子アクティビティのonCreateメソッドに設定している特定の変数があります。現在、子アクティビティのonCreateに到達するまでに時間がかかるようです。そのため、親のメソッドは空の変数を報告しています。一方、親をしばらくスリープ状態にすると、正しい変数が報告されます。

ありがとうクリス

親の活動:

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

0

シーケンスについての最初の回答。最初は親を呼び出し、次は子を呼び出します。この情報は、ソース コードから読み取ることができます。

次の情報は、睡眠を使用しているときに結果が異なる理由についてです。まず、Child Activiry onCreate のコードが完成していません。これは、フィールド (またはローカル変数) childValue の使用方法が示されていないためです。しかし、子オブジェクトにも新しいスレッドを作成していると思います。スレッドは、スレッドを作成している瞬間に実行されるのではなく、ランタイムがこの時間を見つけた瞬間に実行されることに注意してください。メソッド sleep は、メインスレッドがスリープしているためスレッドを実行できることをランタイムに通知します。これが異なる結果の理由です。重要なのは、子に 1 つ、親に 1 つの 2 つのスレッドを作成していることです。

于 2010-07-02T09:59:45.160 に答える