2010-07-02 67 views
3

我有一個家長活動和一個擴展家長活動的子活動。當父母開始子女活動時,Android家長和兒童活動onCreate問題

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

所以,基本上,父啓動子後,也仍然會返回 「父值」 ,但是當我讓線程休眠時,它返回「子值」。

+0

如果您發佈代碼會更好。 – primpap 2010-07-02 04:22:38

+1

如果您發佈了*全部*的代碼,它會更好。感覺就像你將Java繼承(「擴展」)與'startActivity()'混淆了,所以很難理解你在這裏寫的是什麼。 – CommonsWare 2010-07-02 06:41:17

+0

我的不好,我確實與延伸和startActivity混淆。我先打超級,這就是爲什麼我父母的onCreate首先被執行。謝謝CommonsWare! – Chris 2010-07-02 06:58:53

回答

0

關於序列的第一個答案。首先是呼叫家長,下一個是孩子。這些信息可以從您的源代碼中讀取。

下一個信息是關於爲什麼當你使用睡眠時你有不同的結果。 首先,Child Activiry onCreate的代碼沒有完成,因爲沒有顯示如何使用字段(或局部變量)childValue。但我期望你也在子對象中創建新的線程。請記住,線程不是在創建線程時運行,而是在運行時找到時間的時候運行。睡眠通知運行時,您可以運行線程,因爲您的主線程正在休眠,這是不同結果的原因。重要的是你正在創建兩個線程在兒童和一個在父母。

2

您的擴展類的方法(子類)首先被調用,但你的父類的方法後,因爲在你的子類的方法,第一行是

兒童活動

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

} 

這叫做是一個明確的調用你的超類的onCreate方法。