2013-05-07 48 views
1

該應用程序在Android 2.3.5中運行良好 但在Nexus 4(Android 4.2.2)中無法正常工作。爲什麼主要活動在被調用的意圖完成後再次重新啓動(Android 4.2.2)?

應用程序是: 在主要活動的onCreate,它通過意圖調用另一個活動。

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final Intent launchIntent = new Intent(MainActivity.this, AndroidVideoCapture.class); 
    launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    startActivity(launchIntent); 

    // I add a button dynamically here 
} 

現在提供的Nexus 4,它完成AndroidVideoCapture的意圖後,它返回到的onCreate,的開頭 「的setContentView(R.layout.activity_main);」。 所以意圖重複一次又一次。

爲什麼?

回答

2

嘗試增加

if (savedInstanceState == null) { 
    final Intent launchIntent = new Intent(MainActivity.this, AndroidVideoCapture.class); 
    launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    startActivity(launchIntent); 
} 

savedInstanceState不是null則表示活動正在重建。

+0

謝謝!有用!但是我可以知道從Android 2.3.5到4.2.2發生了什麼,所以我們需要添加saveInstanceState? – user1914692 2013-05-07 19:42:07

+0

這可能與更緊密的內存管理有關。 Android 4.2.2自己使用更多的RAM,所以應用程序可用性更低,並且活動被暫停以釋放RAM。 – bclymer 2013-05-07 20:18:33

+0

另外,一般來說,Android不會承諾您的活動在任何時候都不可見時不會被銷燬。因此,即使它有時(或大部分時間)有效,因爲它可能在不同的設備上表現不同,或者如果用戶在內存中具有不同的設置或應用程序,您也不應假定它。 – 2013-05-08 01:45:56

3

您可以檢查是否在nexus 4設備的開發人員選項中啓用了「不要保留活動」。如果選中,禁用。這是從4.0開始才提供的選項,這就是您的父活動被「重新創建」的原因。

+0

我可以知道它爲什麼被設計爲「重新創建」嗎? – user1914692 2013-05-09 00:09:42

+0

這完全是一個開發人員選項,可幫助您驗證是否 1.您已將活動的狀態保存在背景之前。 2.正確處理內存不足的情況(在這種情況下,活動將被破壞)。 現在,由於它被銷燬,它會被重新創建,讓您看起來活動堆棧完好無損。 – 2013-05-09 06:54:05

相關問題