針對Activity的啓動模式理解1---standard模式

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的實例,當點擊Standard按鈕的時候,經過Intent的Activity切換的該Activity,能夠發現Activity的實例是一個新的Activity,

可見這個模式下的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多個實例

相關文章
相關標籤/搜索