2017-08-16 40 views
0

我測試我的手機有多少意圖可以並行創建,但只有一個是創造...意圖爲何不保留在android系統

這是我的應用程序清單

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".MainActivity" 
     android:launchMode="standard"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 

      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".IntentExamples" 
     android:exported="false" 
     android:launchMode="standard" 
     android:parentActivityName=".MainActivity"> 
    </activity> 
</application> 

而且這是我做的所有調用的類...

public class IntentExamples extends AppCompatActivity { 

// Numbers of intents created 
static int COUNTER = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_intent_examples); 

    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    // When a intent is created +1 to the counter 
    COUNTER++; 
    ((TextView) findViewById(R.id.intent_counter)).setText("NUMBER OF INTENTS: " + COUNTER); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main_menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()){ 
     case R.id.another_intent: 
      Intent intent = new Intent(IntentExamples.this, IntentExamples.class); 
      startActivity(intent); 
     case android.R.id.home: 
      this.finish(); break; 
     default: 
      return false; 
    } 
    return true; 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    // When a intent is completely destroy, -1 to the counter 
    COUNTER--; 
} 

主要活動只是從菜單中的代碼複製粘貼代碼...

當我打開創建另一個意圖的項目菜單,在TextView中顯示1個意圖創建,我再次打它,顯示2意圖創建,當我第三次按下按鈕它卡住了2意圖創建...我不明白爲什麼櫃檯沒有達到3個或更多的意圖。

+0

您是否嘗試將日誌放在'onCreate'和'onDestroy'方法中?也許'onDestroy'降級'COUNTER'。 –

+0

當一個意圖被破壞時,我想要一個-1的計數器,我的目標是發現有多少意圖可以同時執行 – Bechma

+0

也許答案是'2' :)我的意思是,也許當你創建第一個活動的第一個一個實際上被摧毀。 –

回答

1

看看這個代碼onOptionsItemSelected()

switch(item.getItemId()){ 
    case R.id.another_intent: 
     Intent intent = new Intent(IntentExamples.this, IntentExamples.class); 
     startActivity(intent); 
    case android.R.id.home: 
     this.finish(); break; 
    default: 
     return false; 
} 

沒有break;startActivity()後,所以Activity完成。因此最終(不一定立即!)onDestroy()被調用,並且COUNTER--被執行。

因爲Activity叫做finish(),所以不可能通過按下BACK來再次達到它 - 而這個「不當行爲」是我第一次無法解釋的。我已準備好相信運行時最多可以保留兩個Activity實例,並將所有其他實例存儲在BackStack中。但不能回去?必須有一個解釋 - 我有點鬆了一口氣,我發現它:)

現在爲什麼COUNTER旋轉設備後顯示1而不是2?

這是因爲方向更改(如所有configuration changes)導致所有Activity實例被銷燬,並且顯示的實例立即重新創建。

+0

我很尷尬,愚蠢的錯誤 – Bechma

+1

@Bechma - 沒有必要:)而一個有趣的問題。順便說一下,活動(不是意圖)是已經或未被破壞的東西。 Intents只是一種傳遞信息的手段(在Activitys,Services,BroadcastReceivers之間)。一旦你解決了錯誤,你會注意到onDestroy()不是經常被調用,但onSaveInstanceState()是 - 沒有太多活動實例同時在RAM中。 – 0X0nosugar