Activity有4種啓動模式:java
standard、singleTop、singleTask、singleInstance;android
Activity的四種啓動模式 涉及到了Task任務:ide
在Android中一些列相關的操做所啓動的Activity構成了一個完整的任務;通常狀況下,在左面或者launcher中單擊圖標啓動Activity時會建立一個新的任務;this
那麼如何切換任務呢?code
單擊Home鍵,可將當前的任務切換到後臺,長按Home鍵的時候能夠查看或者選擇最近的任務;xml
Android爲每個任務(Task)維護一個Activity棧ci
-------------------------------------------------get
第一種啓動模式:standard模式it
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); tView = new TextView(this); Log.d("AndroidCexinsouleActivity", this + "------>" + this.getTaskId()); Button btnButton = new Button(this); btnButton.setText("Standard"); btnButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(AndroidCexinsouleActivity.this, AndroidCexinsouleActivity.class); intent.putExtra("username", "username"); startActivity(intent); } }); LinearLayout ll = new LinearLayout(this); ll.setOrientation(LinearLayout.VERTICAL); ll.addView(tView); ll.addView(btnButton); setContentView(ll); }
可見這個模式下的Activity,每次使用startActivity方法,啓動該Activity都會建立該Activity的新實例。io
在當咱們不斷的點擊Button的時候,發現每一次建立的新的實例,均在同一個Task中建立,是故:當在一個任務中啓動設置standard模式的Activity時,該Activity的實例默認是在當前任務中建立的。
此外,當咱們點擊返回鍵返回的時候,發現返回的Activity是上一個狀態的Activity的實例,因此可見,當咱們不斷的建立新的Activity,實際上是一個壓棧的過程,當經過點擊Home鍵將Acitivty切換到後臺後,再次啓動該程序的時候,程序會將棧頂的Activity的實例調用處理。
從中也能夠得出一個task棧裏面能夠存在多個Activity實例。
從這個圖中 能夠得出:一個Activity的多個實例能夠分佈在不一樣的Task棧中
綜上:對standard啓動模式的一個總結:
standard是默認模式,若是在AndroidManifest沒有明確註冊的話,默認採用standard模式啓動Activity
設置啓動模式:在AndroidManifest.xml中註冊activity時,
在activity標籤中使用 android:launchMode屬性設置
standard模式的特色
1)當activity的啓動模式設置爲standard時,每次使用startActivity方法
啓動該Activity,都將建立該Activity的新實例
2)當在一個任務中啓動設置standard模式的Activity時,該Activity
的實例默認在當前任務中建立。
3)一個Activity的多個實例能夠分佈在不一樣的task棧中
4)一個task棧中也能夠存在一個Activity多個實例