四种启动模式都可以在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(单实例)