1,标准启动模式
通过任务栈,每点一次button,将每一个实例都压入,然后点返回键时候,就弹出之前压入的实例。
每一次的地址都是不同的
测试代码:通过创建一个button和textView来显示本身的TastId和实例的ID
1 public class MainActivity extends AppCompatActivity { 2 3 private TextView tv; 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_main); 8 9 tv= (TextView) findViewById(R.id.tv); 10 11 tv.setText(String.format("TaskId:%d Current Activity ID:%s",getTaskId(),toString())); 12 findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { 13 @Override 14 public void onClick(View v) { 15 startActivity(new Intent(MainActivity.this,MainActivity.class)); 16 } 17 }); 18 } 19 20 }
2,singleTop
这种模式需要在AndroidManifest中进行配置
地址不变
原因:如字面意思,Top,即在栈顶,只能创建一个实例
android:launchMode="singleTop"
如果不配置,就默认为standard 也就是第一种
1 <activity 2 android:launchMode="singleTop" 3 android:name=".MainActivity"> 4 <intent-filter> 5 <action android:name="android.intent.action.MAIN" /> 6 7 <category android:name="android.intent.category.LAUNCHER" /> 8 </intent-filter> 9 </activity>
3,singleTask与singleInstance
只需要把配置文件中的lauchMode改为singleTask或者singleInstance
(1)singleTask
当此时运行时,main点击按钮,跳转到B,然后我们在点按钮跳转回A,发现地址没有变化。
但是,如果此时,我们点击返回按钮,程序就会退出!
原因:当我们第二次点击按钮时,程序会直接把B弹出任务栈以外,栈内只剩下main
(2)singleInstance
每次点击按钮,main和B的地址都固定了。
原因:存在于一个独立的任务栈中,只含有一个activity。
此外,我们在点击按钮时,应该注意到,明显的切换页面的效果。
也要注意到taskID的变化(taskID就是任务栈的编号)