四種啓動模式都可以在AndroidMainfest.xml中通過<activity>標籤指定android:launchMoue屬性來選擇啓動模式,下面我們逐個學習。(括號內的中文名模式僅爲一廂情願起的,只做理解)
先講下修改啓動模式:
<activity android:name=".MainActivity"> android:launchMoue="singleTop" //這裏修改啓動模式,以singleTop模式爲例。 <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
一、standard(標準模式)
不需動手在AndroidMainfest.xml中指定的一個默認啓動模式。
實例:
public class MainActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("MainActivity",this.toString()); setContentView(R.layout.activity_main); Button button1 = (Button) findViewById(R.id.button_1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this,MainActivity.class); startActivity(intent); } }); } 你會發現,即使每次返回棧上都是相同的主活動,單依然會創建新活動。
二、singleTop(單頂棧)
只判斷當前返回棧頂棧的活動是否單一,如果單一就不在新建活動。
實例:
public class MainActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("MainActivity",this.toString()); setContentView(R.layout.activity_main); Button button1 = (Button) findViewById(R.id.button_1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this,SecondActivity.class); //這裏繼續用上一模式實例,只修改此處的第二個參數 startActivity(intent); } }); } 再新建個活動,(在這裏,註冊其他的就不寫出來了,自行完成吧)
public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("SecondActivity",this.toString() ); setContentView(R.layout.second_layout); Button button1 = (Button) findViewById(R.id.button_2); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(SecondActivity.this,MainActivity.class); startActivity(intent); } }); } } 這裏根據Logcat內打印的日誌信息你會發現,在返回棧中創建了兩個MainActivity活動,因此這個啓動模式只能判斷當前返回棧棧頂是否存在即將新建的活動。
(未完待續。。)
三、singleTask(單任務)
四、singleInstance(單實例)