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